还原无效的git合并

时间:2012-11-02 15:58:31

标签: git branching-and-merging git-merge

Threre是多个资源,它们将告诉您如何在git中恢复分支合并,以防您在分支中发现错误。如果没有向上游推送分支,则在分支/合并之后的步骤中的步骤将被重置/纠正错误,或者在分支中恢复/纠正错误/恢复恢复/合并。但是,这仅涉及分支代码中存在错误的情况。今天我试图恢复一个无效的合并,因为在合并提交中解决了冲突的方式。

之前的情况:

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

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

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

其中“〜C”是恢复的“C”和“C1”正确的合并。不幸的是,看起来我不能这样做。

当然重置为1并将“分支”重新合并为“主”工作,但更改已经在上游,我不想做任何肮脏的技巧。

我在帖子Undo a Git merge that hasn't been pushed yet中找到的解决方案没有把我带到任何地方。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

有关该行的说明,请参阅this answer