Как устранить ошибку git «не то, что мы можем объединить»


292

Я только что столкнулся с проблемой при объединении ветки в 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.

вам нужно извлечь удаленный (возможно, но не обязательно, «origin») перед проверкой ветки:

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
Гангадхар ЯННУ

97

Это глупое предложение, но убедитесь, что в названии ветки нет опечаток!


4
не так глупо, поскольку «опечатка» может сводиться к тому, что ветвь еще не выбрана (и, следовательно, неизвестна локально) .. Git делает вещи иначе, чем CVS или SVN ..
klang

2
Проблема также может быть вызвана тем, что имя ветви содержит символы, такие как запятые (,) или апострофы (').
AxeEffect

Также убедитесь, что вы находитесь в правильном репо или окне / вкладке терминала, особенно если вы работаете с несколькими репо одновременно.
Тотемедли

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]

В других случаях я обнаружил, что ошибка «Не то, что мы можем объединить» также произойдет, если удаленная ветвь (origin, upstream) не существует. Это может показаться очевидным, но вы можете оказаться git merge origin/developна репо, который только имеет master.


5
Я серьезно не знаю, почему этот ответ не набрал столько голосов, сколько выше. «git fetch -all» - это команда, которую обычно не хватает до слияния удаленной ветви, и которая решила проблему для меня.
Даянанд Говда,

2
Потому что выборка не происходит автоматически, и вы должны сделать это вручную. Таким образом, пара fetch --all & pull - все сделает свое дело.
Даниэльпопа

Спасибо! То, git remote add upstreamчего мне не хватало, решило это для меня. Я думаю, что распространенной ошибкой является предположение, что вилка автоматически знает, откуда она была разветвлена.
Брент

23

У меня тоже была эта проблема. Ветка выглядела как «username / 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

Это сработало для меня, спасибо. По сути, это правильное решение: прежде чем пытаться объединить его, убедитесь, что у вас есть ветка с исходным кодом.
dps

11

Это может произойти, потому что эта ветвь не на вашем местном. перед слиянием использования

git fetch origin

8

Этот ответ не связан с вышеупомянутым вопросом, но я столкнулся с подобной проблемой, и, возможно, это будет кому-то полезно. Я пытаюсь объединить мою ветку функций, чтобы освоить, как показано ниже:

$ git merge fix-load

для этого получил следующее сообщение об ошибке:

объединить: исправить-загрузить - не то, что мы можем объединить

Я смотрел на все вышеизложенные решения, но ни один из них не работал.

Наконец, я понял, что причиной проблемы является орфографическая ошибка в имени моей ветви (на самом деле это имя ветви слияния fix-loads).


4
Для меня добавление происхождения сработало. Принимая ваш пример, git merge origin/fix-loadsработал.
Рам Патра

7

Вы получаете эту ошибку, потому что ветка, которую вы хотите объединить, не существует в вашем локальном хранилище.

Итак, сначала отметьте группу, которую вы хотите объединить с главной веткой, с помощью следующей команды:

git checkout branch_name_to_merge

После этого попытайтесь объединить его с главной веткой следующей командой:

git merge branch_name_to_merge

2
Это также может произойти, если вы не обращаете внимания на название вашей ветки (то есть с ошибкой) :)
Мэтт Борха,

Это сработало для меня. Когда я работаю в 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».

Обратите внимание, что это довольно очевидно, когда это происходит, потому что сообщение об ошибке в 2 строки:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

3
Пожалуйста, предоставьте комментарий, когда вы проголосовали против. Возможно, это была не проблема оригинального плаката, но это возможная причина сообщения об ошибке (у меня была проблема сама).
Окрокет

2

Мы получили эту ошибку, потому что у нас была запятая (,) в имени ветви. Мы удалили локальную ветку, затем снова проверили ее под новым именем без запятой. Мы смогли успешно слить его.


Подчеркивание также кажется проблематичным. +1
Андерс

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

и скобки тоже были проблематичны ... + 1
Пабло Эзекиэль

1

Для потомков: Как сказал AxeEffect ... если у вас нет опечаток, проверьте, есть ли у вас смешные символы в названии вашей локальной ветви, такие как запятые или апострофы. Именно это случилось со мной только сейчас.


Или подчеркнуть. +1
Андерс

1

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

Я получил эту ошибку, даже несмотря на то, что ветка, с которой я хотел объединиться, была в локальном репозитории, и там не было орфографических ошибок.

Я проигнорировал свои локальные изменения, чтобы я мог переключиться на ветку (Stash или commit также могут быть предпочтительнее). После этого я вернулся в начальную ветку, и слияние прошло успешно.


1

Git, которую вы пытаетесь объединить, может быть не идентифицирована вашим git в настоящее время, поэтому выполните git branch и посмотрите, существует ли ветвь, которую вы хотите объединить, если нет, то выполните, git pull и теперь, если вы это сделаете git branch, ветвь будет видна сейчас, и теперь вы выполняетеgit merge <BranchName>


0

Для меня проблема произошла, когда я попробовал это:

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

Так что на самом деле я должен был написать masterвместо develop, потому что master был именем ветви Subtree, а не моей реальной веткой.


0

Это может звучать странно, но не забудьте настроить адрес электронной почты и имя git:

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.