2

有多种资源会告诉你如何在 git 中恢复分支合并,以防你发现分支中的错误。如果分支未推送到上游,则此类合并之后的步骤将重置/纠正分支/合并中的错误,或者恢复/纠正分支/恢复恢复/合并中的错误。但是,这仅与分支代码中存在错误的情况有关。今天,我尝试恢复由于合并提交中解决冲突的方式而无效的合并。

之前的情况:

master o -- 1 -- C
        \      /
branch   a -- b

将分支合并到 master 的开发人员在提交 1 中遇到了与其他人实现的代码相关的提交。他解决了冲突并提交了它们,从而创建了一个合并提交“c”。问题是他在这样做时引入了一个错误。我当时想做的是恢复这个合并并正确地重新合并它,创建一个看起来像这样的东西:

master o -- 1 -- C -- ~C -- C1
        \      /          /
branch   a -- b ----------

其中“~C”是还原的“C”,“C1”是正确的合并。不幸的是,我似乎无法做到这一点。

当然重置为 1 并将“分支”重新合并到“主”作品中,但是更改已经在上游,我不想做任何肮脏的把戏。

我在线程中找到的解决方案撤消尚未推送的 Git 合并并没有带我去任何地方。

我得到的最干净的想法是修复“C”中损坏的代码并将它们提交给“master”,但在这种情况下,你不会从 git 获得任何帮助,例如冲突文件列表或突出显示的冲突行,在这种情况下很有帮助。

有任何想法吗?

4

1 回答 1

2

从 git 的角度来看,您尝试创建的图表没有意义。具体来说,使 C1 成为 ~C 和 b 的合并是很奇怪的,因为它们的合并基础是 b,所以没有什么可做的。

如果您不能或不会进行快进推送,那么您最好的选择是重新创建合并并在 ~C 现在所在的位置创建提交 C1。称之为“修复拙劣的冲突解决方案”并完成它 - 无需额外的合并混乱。

要创建这样的提交,首先创建正确合并的提交 C1,然后运行类似:

git reset --hard $(git commit-tree -p C -m "fix botched conflict resolutions" C1:)

有关该行的解释,请参阅此答案。

于 2012-11-02T16:15:07.027 回答