在错误的手动合并冲突解决后,重新冲突合并

时间:2014-07-22 12:36:37

标签: git merge conflict

解决合并冲突并提交后,很明显我的手动合并冲突解决方案错误。我已经上演,承诺并推动了回购。 如何将冲突的文件重新置于冲突状态,以便我可以采用不同的方式解决?

请注意,git checkout -m为时已晚,因为我已经提交了错误的合并解决方案。

1 个答案:

答案 0 :(得分:1)

从干净的工作目录开始,我会在合并之前重新设置,重新启动新分支,然后再次执行合并。然后,您可以在原始合并结果分支和新分支之间执行差异,以获取要在原始分支上应用的补丁文件。由于您已经推送了结果,因此您需要创建一个新的提交来更正合并提交,而不是在编辑历史记录后执行强制推送。

过于详细的版本:

如果您当前的历史记录看起来像这样,c是您想要更改的合并提交。

a - c - d <-HEAD/master
   /  
  b

完全 干净的工作目录开始。

git branch old_merge <sha1 of c>  // create branch for original merge
git checkout -b new_merge <sha1 of a> // create and checkout branch before merge
// re-merge branch

这将创建这样的东西......

 old_merge
    ∨
a - c - d <-master
  X  
b - c' <-HEAD
    ∧
 new_merge

这可能真的令人困惑,但希望你能得到这个想法。现在,您可以在old_merge分支和new_merge分支之间执行差异,以获取您需要在master上进行的更改。

git diff old_merge..new_merge

您可以使用patch UNIX实用程序在再次检出master之后应用两个分支之间的差异。

git checkout master
git diff old_merge..new_merge | patch -p1

希望这会有所帮助。如果你对任何事感到困惑,请告诉我。