即使 git 显示“已经是最新的”,如何强制合并。

Hub*_*NNN 0 git merge

大约半年前,一位开发人员搞砸了,并将一个他不应该的分支(我们的 alpha 测试分支)合并到 master 中。我们通过恢复合并很快解决了这个问题。

快进 6 个月了,今天我试图合并那个错误合并中落在 master 上的分支之一,但 git 说我不能。该分支的更改不在 master 上,但 git 不允许合并。

有没有办法强制合并?

mat*_*att 7

该分支的更改不在 master 上

该分支的“更改”不在 上master,因为恢复合并提交会反转这些更改。但该分支的提交master. 恢复合并提交对此没有任何作用;它没有改变拓扑:

A -- B -- C -- D -- M -- Mrevert -- E ... (master)
      \           /
       X -- Y -- Z
Run Code Online (Sandbox Code Playgroud)

你有看到?X、Y 和 Z仍处于打开状态master。所以它们永远不能再次合并master。那趟火车已经离开车站了。

可以做的就是将 X、Y 和 Z 挑选到一个新分支中并将合并。这是因为cherry pick 所做的提交与已合并的提交不同。(或者,正如 Romain Valeri 所建议的那样,只需创建一个包含可还原还原的提交的分支,然后合并该分支。)

有关更多信息,请参阅(始终查看)Linus Torvald 自己对这种情况的解释以及您的选择:

https://github.com/git/git/blob/master/Documentation/howto/revert-a-faulty-merge.txt

  • 没有。错误在于您对恢复的理解。阅读链接的讨论。阅读我的答案的第一段。如果您想_擦除_合并本身,则需要_重置_,而不是_恢复_。但你可能无法在“master”上做到这一点,所以恢复确实是你最好的选择。你没有做错任何事,Git 也没有。别担心,开心就好。 (2认同)