如何解决git的“无法合并的错误”错误


289

在git中将分支合并到master时遇到了一个问题。首先,通过运行获得分支名称git ls-remote。我们将该分支称为“分支名称”。然后,我运行git merge branch-name命令并得到以下结果:

fatal: branch-name - not something we can merge

如何解决此错误?

Answers:


356

如何出现“我们无法合并的东西”所示?,此错误可能是由分支名称中的错字引起的,因为您正试图拉出不存在的分支。

如果这不是问题所在(如我的情况),则可能您没有要合并的分支的本地副本。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
如果您尝试在命令行上同步fork(help.github.com/articles/syncing-a-fork),那么该错误可能是因为您错过了步骤0。什么?没有列出步骤0?是的,这就是为什么容易错过的原因。“在将fork与上游存储库同步之前,必须配置一个指向Git中上游存储库的遥控器。” <-这是第0步。如果您跳过该步骤,则会收到上述错误,您可能会将其输入到Google中,并带到这里。:-)
史蒂夫·邦兹

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

96

这是一个愚蠢的建议,但请确保分支名称中没有错字!


4
并不是那么愚蠢,因为“ typo”可能会简化为分支尚未被提取(因此是本地未知)的事实.. Git所做的事情与CVS或SVN有所不同..
klang 2014年

2
如果分支名称包含逗号(,)或撇号(')之类的字符,也可能导致此问题。
AxeEffect 2015年

还要确保您在正确的存储库或终端窗口/选项卡中,尤其是同时处理多个存储库时。
totymedli

71

当从远程上游拉动时,git fetch --all为我完成了the俩:

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 --all就可以了。
丹尼尔波帕

谢谢!这git remote add upstream是我所想不到的重要事情,它为我解决了这一问题。我认为常见的错误是假设叉子自动知道它是从哪里分叉的。
布伦特

23

我也有这个问题。分支看起来像'username / master',它看起来像我定义的远程地址,似乎使git感到困惑。对我来说

git merge origin/username/master

工作得很好。


4
我也必须origin/在远程分支的名称之前加上。
AsGoodAsItGet's

如果分支名称中包含正斜杠/,则必须执行此操作。
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


7

您收到此错误消息是因为要合并的分支在本地存储库中不存在。

因此,首先通过以下命令检出要合并到master分支的分支:

git checkout branch_name_to_merge

之后,尝试通过以下命令将其与master分支合并:

git merge branch_name_to_merge

2
如果您不注意分支的名称(例如,拼写错误),也会发生这种情况:)
Matt Borja

这对我有用。当我在Atom中使用Git选项卡工作时,并且使用下拉菜单切换分支时,有时我必须转到命令行和checkout分支
nzaleski

7

此错误表明您要在其中合并更改的分支(即您的情况下,分支名称)在您的本地中不存在,因此您应该签出该分支并获取本地更改。检出到您的master分支并提取,然后执行以下步骤:

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

我会很挑剔,说我不认为错误消息会提示类似上面的内容:-)
Brian Agnew

6

这个答案与上面的问题无关,但是我遇到了类似的问题,也许对某人有用。我将功能分支合并为master,如下所示:

$ git merge fix-load

我收到以下错误消息:

合并:修复负载-我们无法合并的内容

我首先研究了所有解决方案,但没有一个可行。

我发现问题是我的分支名称(实际上,合并分支名称是fix-loads)上的拼写错误。


4
对我来说,增加起源是可行的。以您的榜样为例git merge origin/fix-loads
拉姆·帕特拉

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命令(或与此相关的任何其他Shell命令)生成的,请确保它的末尾不包含回车符。在将字符串传递给“ git merge”之前,您将不得不剥离它。

请注意,发生这种情况非常明显,因为错误消息出现在两行中:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

3
拒绝答案时,请提供评论。也许这不是原始海报的问题,但这可能是错误消息的原因(我自己有问题)。
ocroquette

2

因为分支名称中有逗号(,),所以出现了此错误。我们删除了本地分支,然后以不带逗号的新名称重新检查了它。我们能够成功合并它。


下划线似乎也有问题。+1
安德斯·林登

1
我经常在分支名称@AndersLindén中使用下划线
nzaleski

和括号也有问题... + 1
Pablo Ezequiel

1

对于后代:就像AxeEffect所说的...如果没有错字,请检查本地分支名称中是否有可笑的字符,例如逗号或撇号。正是那件事发生在我身上。


或强调。+1
安德斯·林登

1

我建议检查您是否能够切换到要与之合并的分支。

即使我要合并的分支在本地存储库中也没有拼写错误,但我还是收到了此错误。

我忽略了本地更改,因此可以切换到分支(也可以选择“隐藏”或“提交”)。此后,我切换回初始分支,合并成功。


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

我有一个带有master的工作树,另一个分支则在两个不同的工作文件夹中签出。

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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.