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的帮助,例如冲突文件列表或突出显示的冲突行,在这种情况下非常有帮助。
有什么想法吗?
答案 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。