2013-05-31 20 views
150

我刚刚在git中将分支合并到master时遇到问题。首先,我通过运行git ls-remote来获得分支名称。我们称该分支为“分支名称”。然后我跑git merge branch-name命令,并得到以下结果:如何解决git的“不是我们可以合并的东西”错误

fatal: branch-name - not something we can merge 

如何解决这个问题?

回答

192

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. 

你需要获取远程(可能,但不一定是“原产地”)检出的分支前:

git fetch remote-name 
+0

添加新的远程设备后,发生了这种情况 - 在合并远程分支之前,我需要首先执行git fetch。 – Jason

+0

从远程获取并检出分支。 git fetch && git checkout分支名称 –

+1

发生在我身上的时候,当我被误入错误的项目(即它是一个不同的回购,甚至没有我想合并的分支) – JoelFan

57

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

+3

没有那么愚蠢,因为“打字错误”可能会降低分支还没有被提取的事实(因此在本地是未知的)。Git做的事情与CVS或SVN不同。 – klang

+2

如果问题也可能导致分支名称包含逗号(,)或撇号(')等字符。 – AxeEffect

+0

对我来说,我的问题实际上已经用这个答案解决了,这很愚蠢。 :) –

3

我得到了这个错误,当我做了git merge BRANCH_NAME "some commit message" - 我忘了为提交消息添加-m标志,所以它认为分支名称包括评论。

2

如果包含引用的字符串是由其他Git命令(或任何其他shell命令)生成的,请确保它最后不包含回车。在将字符串传递给“git merge”之前,您必须将其去掉。

请注意,这是很明显,当出现这种情况,是因为在两行的错误消息:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9 
- not something we can merge 
+3

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

13

我有这个问题为好。该分支看起来像'用户名/主'这似乎混淆git,因为它看起来像我定义的远程地址。对我来说使用这个

git merge origin/username/master 

工作得很好。

+0

这对我有用。我把远程名称与分支名称混淆了。 – Steve

+0

我不得不在远程分支的名称前加'origin /'。 – AsGoodAsItGets

1

对于后人:就像AxeEffect说的...如果你没有错别字检查你的本地分支名称中是否有荒谬的字符,如逗号或撇号。刚才那件事发生在我身上。

+0

或下划线。 +1 –

39

当从远程上游拉动,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] 

在其他情况下,我找到了“不是我们可以合并”的错误也会发生如果远程(原产地,上游)分支不存在。这可能看起来很明显,但是你可能会发现自己在只有master的回购协议上执行git merge origin/develop

+2

我真的不知道为什么这个答案没有获得与上面一样多的选票。 'git fetch -all'是在合并远程分支之前通常没有运行的命令,并且解决了我的问题。 –

+1

因为抓取不会自动拖动,所以您必须手动执行此操作。所以一对 - 所有和拉 - 所有将做的伎俩。 – danielpopa

+0

谢谢! 'git remote add upstream'是我失踪的重要事情,为我解决了这个问题。我认为一个常见的错误是假设一个分支自动知道它从哪里分出来。 – Brent

1

我建议检查您是否能够切换到您尝试合并的分支。

即使我想合并的分支位于本地存储库中,但没有拼写错误,我得到了此错误。

我忽略了我的本地更改,以便我可以切换到分支(存储或提交也可以是首选)。在此之后,我切换回初始分支,合并成功。

4

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

所以,首先结账要通过以下命令将合并到主分支BRACH:

git checkout branch_name_to_merge 

在此之后尝试通过以下命令主分支合并它:

git merge branch_name_to_merge 
+1

这也可能发生,如果你不注意你的分支的名称(即拼写错误:) :) – rdev5

+0

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

1

我们得到了这个错误,因为我们在分支名称中有一个逗号(,)。我们删除了本地分支,然后用一个没有逗号的新名称重新检查它。我们能够成功地合并它。

+0

下划线也似乎有问题。+1 –

+0

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

-1

我试过 git merge“Commit-message”,而不是 git merge -m“Commit-message”。

0

对我来说,问题发生时,我尝试这样做:

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

所以,其实我应该写master代替develop,因为主人子树,不是我的实际分支的分支名。

相关问题