Як вирішити помилку git "не те, що ми можемо об'єднати"


291

Я щойно стикався з проблемою, коли об’єднував гілку в master у git. По-перше, я отримав назву гілки, запустивши git ls-remote. Назвемо цю гілку "ім'ям гілки". Потім я запустив git merge branch-nameкоманду і отримав такий результат:

fatal: branch-name - not something we can merge

Як вирішити цю помилку?

Відповіді:


357

Як показано в Як виникає "не те, що ми можемо об'єднати"? , ця помилка може виникнути з помилки в назві гілки, оскільки ви намагаєтеся витягнути гілку, яка не існує.

Якщо це не проблема (як у моєму випадку), ймовірно, у вас немає локальної копії гілки, яку ви хочете об'єднати. Git вимагає місцевих знань обох гілок, щоб об'єднати ці гілки. Вирішити цю проблему можна, перевіривши гілку для злиття, а потім повернувшись до гілки, у яку потрібно об'єднатись.

git checkout branch-name
git checkout master
git merge branch-name

Це має працювати, але якщо ви отримаєте повідомлення про помилку

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

перед тим, як перевірити гілку, потрібно отримати віддалений (можливо, але не обов'язково "походження"):

git fetch remote-name

3
Це сталося зі мною після додавання нового пульта - мені потрібно було зробити git fetchперше, перш ніж об’єднати віддалену гілку в.
Джейсон

отримання та випуск відділення з віддаленого відділення git fetch && git checkout BranchName
Juni Brosas

2
Це сталося зі мною, коли я вступив у невірний проект (тобто це було інше репо, у якого навіть не було гілки, яку я хотів об'єднати)
JoelFan

1
Якщо ви намагаєтеся синхронізувати вилку в командному рядку ( help.github.com/articles/syncing-a-fork ), ця помилка, ймовірно, тому, що ви пропустили крок 0. Що? Ні кроку 0 не вказано? Так, саме тому легко пропустити. "Перш ніж ви зможете синхронізувати свою вилку з сховищем вище, потрібно налаштувати пульт, який вказує на сховище вище в потоці в Git." <- це крок 0. Якщо пропустити цей крок, ви отримаєте вищезгадану помилку, яку ви, ймовірно, ввели в Google, ведучи вас сюди. :-)
Стів Бондс

1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU

97

Це нерозумна пропозиція, але переконайтеся, що в назві гілки немає помилки друку!


4
не настільки глупо, як "помилка" може звести до того, що гілка ще не отримана (і тим самим невідомо місцево) .. Git робить все інакше, ніж CVS або SVN ..
klang

2
Проблема також може бути викликана, якщо назва гілки містить символи, як коми (,) або апострофи (').
AxeEffect

Також переконайтеся, що ви знаходитесь у правильному репо або вікні / вкладці терміналу, особливо якщо ви працюєте над декількома репостами одночасно.
totymedli

71

Коли витягували з віддаленого вгору за течією, git fetch --allзробили для мене трюк:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

В інших випадках я виявив, що помилка "Не те, що ми можемо об'єднати" також трапиться, якщо віддалена (вихідна, висхідна) гілка не існує. Це може здатися очевидним, але ви можете виявити, що робите git merge origin/developна репо, яке тільки є master.


5
Я серйозно не знаю, чому ця відповідь набрала не стільки голосів, скільки вище. 'git fetch -all' - це команда, яку зазвичай пропускає запустити перед об'єднанням віддаленої гілки, і це вирішило для мене проблему.
Dayanand Gowda

2
Тому що витяг не витягується автоматично, і вам доведеться це робити вручну. Тож парний прийом - all & pull - всі зроблять трюк.
danielpopa

Дякую! Це git remote add upstreamбуло найважливіше, що мені бракувало, що це вирішило для мене. Я думаю, що звичайна помилка полягає в тому, що вилка автоматично знає, звідки вона була роздвоєна.
Брент

23

У мене теж було це питання. Гілка виглядала як "ім'я користувача / master", що, здавалося, заплутало git, оскільки виглядало як віддалена адреса, яку я визначив. Для мене це використовую

git merge origin/username/master

працював ідеально чудово.


4
Мені довелося поставити origin/і назву віддаленої гілки.
AsGoodAsItGets

Це вам доведеться зробити, якщо в назві гілки є пряма косою рисою /.
CTS_AE

21

Наведений нижче метод працює для мене кожен раз.

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged

Це працювало для мене дякую. I це, по суті, правильне рішення: в основному переконайтеся, що ви перевірили гілку джерела, перш ніж намагатися об'єднати її.
dps

11

Це може статися тому, що ця філія не є у вашому регіоні. перед об'єднанням використання

git fetch origin

8

Ця відповідь не стосується вищезазначеного питання, але я зіткнувся з подібним питанням, і, можливо, це комусь стане в нагоді. Я намагаюся об'єднати мою гілку функцій, щоб засвоїти, як показано нижче:

$ git merge fix-load

для цього отримано таке повідомлення про помилку:

злиття: fix-load - не те, що ми можемо об'єднати

Я розглядав перш за все рішення, але жодне з відпрацьованих не було.

Нарешті, я зрозумів, що причиною проблеми є написання помилки в назві моєї гілки (насправді назва гілки злиття є fix-loads).


4
Для мене додавання походження працювало. Беручи свій приклад, git merge origin/fix-loadsпрацювали.
Ram Patra

7

Ви отримуєте цю помилку, оскільки гілка, яку потрібно об'єднати, не існує у вашому локальному сховищі.

Отже, спочатку перевірте брашу, яку ви хочете об'єднати в головну гілку, виконавши наступну команду:

git checkout branch_name_to_merge

Після цього спробуйте об'єднати його з головним відділенням за допомогою наступної команди:

git merge branch_name_to_merge

2
Це також може статися, якщо ви не звертаєте уваги на назву своєї філії (тобто неправильно написано) :)
Matt Borja

Це працювало для мене. Коли я працюю в Atom за допомогою вкладки Git і перемикаю гілки зі спадним меню, іноді мені доводиться переходити до командного рядка та checkoutгілки
nzaleski

7

Ця помилка дозволяє припустити, що гілка, з якої ви хочете об'єднати зміни (тобто у вашому випадку ім'я гілки), відсутня у вас локально, тому вам слід перевірити гілку та отримати локальні зміни. Отримайте замовлення у своїй головній гілці та отримайте наступні кроки:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name

Я буду прискіпливим і скажу, що не думаю, що повідомлення про помилку говорить про щось подібне вище :-)
Брайан

3

Я отримав цю помилку, коли зробив git merge BRANCH_NAME "some commit message"- я забув додати прапор -m для повідомлення фіксації, тому вважав, що назва гілки включає коментар.


3

На мою думку, я пропустив карту свого місцевого відділення з віддаленим репо. я зробив нижче, і це працювало чудово.

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain

2

Якщо рядок, що містить посилання, створений іншою командою Git (або будь-якою іншою командою оболонки для цього питання), переконайтеся, що вона не містить зворотного каретки. Вам доведеться зняти його, перш ніж передавати рядок, щоб "git merge".

Зауважте, що це досить очевидно, коли це відбувається, оскільки повідомлення про помилку в двох рядках:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

3
Будь ласка, надайте коментар, коли ви сказили відповідь. Можливо, це не проблема, яку мав оригінальний плакат, але це можлива причина повідомлення про помилку (у мене була сама проблема).
окрокет

2

Цю помилку ми отримали, оскільки у назві гілки була кома (,). Ми видалили локальну гілку, потім повторно перевірили її під новою назвою без коми. Ми змогли її успішно об'єднати.


Підкреслення також видається проблематичним. +1
Anders Lindén

1
Я часто використовую підкреслення у назвах гілок @ AndersLindén
nzaleski

і дужки теж були проблематичними ... + 1
Пабло

1

Для нащадків: Як сказав AxeEffect ... якщо у вас немає помилок друку, щоб побачити, чи є у вас назві місцевих філій смішні символи, як коми або апострофи. Саме так сталося зі мною саме зараз.


Або підкреслити. +1
Anders Lindén

1

Я пропоную перевірити, чи зможете ви перейти на гілку, з якою ви намагаєтеся об'єднатись.

Я отримав цю помилку, незважаючи на те, що гілка, з якою я хотів об'єднатись, знаходилась у локальному сховищі, а помилок написання не було.

Я проігнорував свої локальні зміни, щоб я міг перейти до гілки (також можна віддавати перевагу скриньці або фіксації). Після цього я перейшов на початкову гілку, і злиття було успішним.


0

Для мене проблема виникла, коли я спробував це:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

Тож насправді я мав би писати masterзамість цього develop, тому що майстер був назвою гілки Subtree, а не моєю реальною гілкою.


0

Це може здатися дивним, але не забудьте налаштувати свою електронну пошту та ім’я:

git config --global user.email "MY@EMAIL.COM"
git config --global user.name "FIRST_NAME LAST_NAME"

0

Для мене проблемою були «подвійні лапки» у повідомленні про злиття. Тож коли я зняв подвійну позначку, все магічно спрацювало. Я сподіваюся комусь допомогти. (Вибачте за мою погану англійську)


0

У мене було робоче дерево з майстром, а інша гілка перевірена в двох різних папках роботи.

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

Якщо вам потрібно просто об'єднати останню комісію:

git merge origin/vyas-cr-core 
git push

І це те саме, що я завжди робив:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push

0

Гілка, яку ви намагаєтеся об'єднати, може бути не ідентифікована вами git в даний час, тому виконайте git branch і подивіться, чи існує гілка, яку ви хочете об'єднати, ні, якщо не тоді виконайте, git pull і якщо ви це зробите git branch, гілка буде видно зараз, і тепер ви виконуєтеgit merge <BranchName>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.