在不正确的手动合并冲突解决后,重新冲突合并



在解决合并冲突并提交之后,很明显我的手动合并冲突解决方法是错误的。我已经安排、提交并推动了回购。如何将冲突文件恢复到冲突状态,以便我可以以不同的方式解决它?

注意,对于git checkout -m来说已经太晚了,因为我已经提交了不正确的合并解析。

从一个干净的工作目录开始,我将硬复位到合并之前,启动一个新的分支,并再次执行合并。然后,您可以在原始合并结果分支和新分支之间执行差异,以获得应用于原始分支的补丁文件。因为你已经推送了你的结果,你会想要创建一个新的提交来纠正合并提交,而不是在编辑历史之后执行强制推送。

过于详细的版本:

如果你当前的历史记录看起来像这样,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分支之间执行差异,以获得您需要在主服务器上进行的更改。

git diff old_merge..new_merge

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

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

希望这有帮助。

最新更新