在解决合并冲突并提交之后,很明显我的手动合并冲突解决方法是错误的。我已经安排、提交并推动了回购。如何将冲突文件恢复到冲突状态,以便我可以以不同的方式解决它?
注意,对于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
希望这有帮助。