如何解决git的"不是我们可以合并的"错误

Bri*_*ian 255 git branching-and-merging

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

fatal: branch-name - not something we can merge
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

Bri*_*ian 319

"我们可以合并的东西"如何出现?,此错误可能来自分支名称中的拼写错误,因为您尝试拉出不存在的分支.

如果这不是问题(如我的情况),很可能您没有要合并的分支的本地副本.Git需要两个分支的本地知识才能合并这些分支.您可以通过签出要合并的分支然后返回要合并到的分支来解决此问题.

git checkout branch-name
git checkout master
git merge branch-name
Run Code Online (Sandbox Code Playgroud)

这应该有效,但如果你收到错误说

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

在签出分支之前你需要获取遥控器(可能,但不一定是"origin"):

git fetch remote-name
Run Code Online (Sandbox Code Playgroud)

  • 添加新遥控器后发生了这种情况 - 我需要在合并远程分支之前首先执行`git fetch`. (3认同)
  • `Git 需要两个分支的本地知识才能合并这些分支` (3认同)
  • 当我被 cd 到错误的项目中时,这发生在我身上(即它是一个不同的 repo,甚至没有我想要合并的分支) (2认同)

end*_*ess 87

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

  • 不是那么愚蠢,因为"拼写错误"可以减少到分支尚未被取出的事实(因而在本地未知).Git做的事情与CVS或SVN不同. (4认同)
  • 如果分支名称包含逗号(,)或撇号(')等字符,也可能导致此问题. (2认同)

Ene*_*nso 66

当从远程上游拉出时,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]
Run Code Online (Sandbox Code Playgroud)

在其他情况下,我发现如果远程(origin,upstream)分支不存在,也会发生"我们无法合并"的错误.这似乎是显而易见的,但你可能会发现自己git merge origin/develop只在一个只有的回购上做master.

  • 我真的不知道为什么这个答案没有像上面那样获得多少票.'git fetch -all'是一个在合并远程分支之前通常会错过的命令,它为我解决了问题. (4认同)
  • 因为提取不会自动提取,您必须手动执行此操作.所以一对fetch --all&pull --all就可以了. (2认同)

spe*_*ius 22

我也有这个问题.该分支看起来像'username/master',它似乎混淆了git,因为它看起来像我定义的远程地址.对我来说这个

git merge origin/username/master
Run Code Online (Sandbox Code Playgroud)

工作得很好.

  • 我不得不在远程分支的名称之前放置`origin /`. (4认同)

小智 16

以下方法每次都适合我.

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
Run Code Online (Sandbox Code Playgroud)


小智 10

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

git fetch origin
Run Code Online (Sandbox Code Playgroud)


Dav*_*d B 9

今天,当我直接从 master 拉取后将另一个分支合并到我的分支中时,我遇到了这个问题,我必须先签出并拉取我要合并的分支,然后我才能成功地将这个分支合并到我的分支中。

git checkout branch-to-merge
git pull
git checkout my-branch-name
git merge branch-to-merge
Run Code Online (Sandbox Code Playgroud)


Ama*_*gar 7

此错误表明您想要合并的分支更改(即在您的情况下为branch-name)在本地不存在,因此您应该签出分支并获取本地更改.结帐到您的主分支并获取,然后按照以下步骤操作:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name
Run Code Online (Sandbox Code Playgroud)


voi*_*one 7

如果您没有使用origin关键字并且分支不是您自己的分支,您也可能会遇到此错误。

git checkout <to-branch> 
git merge origin/<from-branch>
Run Code Online (Sandbox Code Playgroud)


Bil*_*een 6

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

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

git checkout branch_name_to_merge
Run Code Online (Sandbox Code Playgroud)

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

git merge branch_name_to_merge
Run Code Online (Sandbox Code Playgroud)

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

yal*_*esh 5

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

$ git merge fix-load
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

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

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

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

  • 对我来说,添加原点是有效的。以您的示例为例,“git merge origin/fix-loads”有效。 (4认同)

Opt*_*hit 5

我必须建议首先检查所有分支机构或您要寻找的分支机构是否可用

git branch -r

从列表中检查

origin/HEAD -> origin/main
origin/feature/branch_1
origin/feature/branch_2
origin/feature/branch_3
origin/feature/branch_4
origin/feature/your branch
Run Code Online (Sandbox Code Playgroud)

建议是从源本身复制列表,然后执行git merge origin/feature/branch_2。复制粘贴将消除拼写错误。