如何解决Git的“not something we can merge”错误

469

我在使用 git 将一个分支合并到主分支时遇到了问题。首先,我通过运行命令 git ls-remote 获取了分支的名称。假设该分支名称为 "branch-name"。然后,我运行了命令 git merge branch-name,但得到以下结果:

fatal: branch-name - not something we can merge

我该如何解决这个错误?


对我有效的唯一方法是使用命令行自动完成。我输入了git并自动完成了merge和branch-name。即使复制粘贴分支名称也失败了,因此可能存在隐藏字符,这样就可以摆脱它们。我使用的是bash 4.4,不确定这是否适用于所有shell。自动完成git命令对我来说是一件新事情。 - Mote Zart
在我的情况下,他们决定将远程分支的名称从“master”改为“main”。他们试图关注BLM(黑人的命也是命)是很好的,但这让我感到非常困惑。 - undefined
33个回答

581
根据How does "not something we can merge" arise?所示,此错误可能由分支名称中的拼写错误导致,因为您试图拉取一个不存在的分支。
如果这不是问题(就像在我的情况下一样),那么很可能是您没有要合并的分支的本地副本。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

5
在添加了一个新的远程之后,我需要先运行 git fetch,然后再合并远程分支。 - Jason
2
当我进入错误的项目(即不同的存储库,甚至没有我想要合并的分支)时,这种情况发生在我身上。 - JoelFan
1
如果您正在尝试在命令行同步分叉(https://help.github.com/articles/syncing-a-fork/),那么这个错误可能是因为您错过了第0步。什么?没有列出第0步?是的,这就是为什么很容易错过的原因。“在您可以将您的分叉与上游存储库同步之前,您必须配置一个指向Git中上游存储库的远程。” <-- 这是第0步。如果您跳过此步骤,则会出现上述错误,您可能已经将其输入Google,导致您来到这里。 :-) - Steve Bonds
3
为了合并这些分支,Git 需要本地了解这两个分支的情况。 - Buddybear
1
对我有用(我已经从代码库克隆了) - yasin-munshi
显示剩余7条评论

165

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


11
“typo”并不是那么愚蠢,因为它可能意味着分支尚未被获取(因此本地未知)... Git的做法与CVS或SVN有所不同... - klang
3
如果分支名称包含逗号(,)或撇号('),也可能会导致问题。 - AxeEffect
这种情况发生在我的分支中,由于主分支重命名不一致导致了问题! - Rian Sanderson
一定要确保你的分支名称没有拼写错误!感谢 @endless! - Akindele Michael
谢谢提醒。我会定期回顾你的评论,至少每三个月回来看一次 :-) - undefined
显示剩余3条评论

102

当从远程上游拉取代码时,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)分支不存在的情况下。这可能看起来很明显,但你可能会在只有master的仓库中执行git merge origin/develop操作。

7
我真的不知道为什么这个答案没有得到像上面那个答案一样多的投票。'git fetch -all'是在合并远程分支之前通常会错过运行的命令,而这解决了我的问题。 - Dayanand Gowda
2
因为 fetch 不会自动拉取,你必须手动执行。所以一对 fetch --all & pull --all 就可以解决问题了。 - danielpopa
1
谢谢!git remote add upstream 是我缺失的重要部分,解决了我的问题。我认为一个常见的错误是假设 fork 自动知道它从哪里 fork 来的。 - Brent

38

我也遇到了这个问题。分支看起来像'username/master',这似乎让Git感到困惑,因为它看起来像我定义的远程地址。对我来说,使用以下命令解决了这个问题:

git merge origin/username/master

运行得非常完美。


11
我必须在远程分支名称前加上 origin/ - AsGoodAsItGets
如果分支名称中包含正斜杠“/”,则必须执行此操作。 - CTS_AE

32

以下方法每次对我都有效。

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

这对我有用,谢谢。基本上,这是正确的解决方案:确保在尝试合并之前已经检出了源分支。 - a2f0
这对我有用,但不确定为什么?你能解释一下吗? - tarekahf

16

这个回答与上面的问题无关,但我遇到了类似的问题,也许对某些人有用。我正在尝试像下面这样将我的特性分支合并到主分支:

$ git merge fix-load

针对这个问题,我收到了以下错误信息:

合并:fix-load - 这不是我们可以合并的内容

我研究了上述所有解决方案,但都没有生效。

最后,我意识到问题的原因是我的分支名称拼写错误了(实际上,合并分支的名称应该是fix-loads)。


5
对我而言,添加 "origin" 生效了。以你的例子为例,git merge origin/fix-loads 生效了。 - Ram Patra

16

这可能是因为该分支不在您的本地。在合并之前使用

git fetch origin

10
如果你没有使用origin关键字或者该分支不是你自己的分支,你也可能遇到这个错误。
git checkout <to-branch> 
git merge origin/<from-branch>

9
今天我在直接从主分支拉取后合并另一个分支时遇到了这个问题,我必须先检出并拉取要合并的分支,然后才能成功将此分支合并到我的分支中。
git checkout branch-to-merge
git pull
git checkout my-branch-name
git merge branch-to-merge

8
您遇到此错误是因为您想合并的分支在您的本地代码库中不存在。
因此,首先通过以下命令检出要合并到主分支的分支:
git checkout branch_name_to_merge

接下来尝试使用以下命令将其与主分支合并:

git merge branch_name_to_merge

2
如果您没有注意到分支的名称(即拼写错误),也可能会发生这种情况 :) - Matt Borja
这对我有用。当我在Atom中使用Git选项卡工作并使用下拉菜单切换分支时,有时我必须转到命令行并checkout该分支。 - nzaleski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接