我从link 找到了关于如何恢复合并的很好的解释,我复制粘贴了下面的解释,以防万一下面的链接不起作用。 p>
如何恢复错误的合并
Alan(alan@clueserver.org) 说:
我有一个主分支。我们有一个分支
开发人员正在做的工作。他们声称它已经准备好了。我们合并它
进入主分支。它破坏了一些东西,所以我们恢复合并。
他们对代码进行更改。他们达到了他们所说的程度
没关系,我们再次合并。
检查时,我们发现在还原之前所做的代码更改是
不在主分支中,但之后的代码更改在主分支中
分支。
并请求帮助从这种情况中恢复。
“恢复合并”之后的历史记录如下所示:
---o---o---o---M---x---x---W
/
---A---B
其中 A 和 B 处于不太好的分支开发中,M 是将这些过早的更改带入主线的合并,x 是与侧分支所做的和已经在主线上所做的无关的更改,以及 W是“合并 M 的还原”(W 看起来不是 M 倒置吗?)。 IOW,“diff W^..W”类似于“diff -R M^..M”。
可以通过以下方式“恢复”合并:
$ git revert -m 1 M
侧支的开发者改正错误后,历史可能是这样的:
---o---o---o---M---x---x---W---x
/
---A---B-------------------C---D
其中 C 和 D 用于修复 A 和 B 中的问题,并且在 W 之后您可能已经在主线上进行了一些其他更改。
如果合并更新后的分支(D 在其尖端),在 A 或 B 中所做的任何更改都不会出现在结果中,因为它们已被 W 还原。这是 Alan 看到的。
Linus 解释情况:
恢复常规提交只会有效地撤消该提交
做到了,而且相当简单。但也恢复合并提交
撤消提交更改的 data,但它确实如此
合并对 history 的影响没有任何影响。
所以merge还是会存在的,还是会被看成join的
两个分支在一起,未来的合并将看到合并为
最后一个共享状态 - 以及恢复合并的恢复带来
in 根本不会影响这一点。
因此,“还原”会撤消数据更改,但它不是
“撤消”是指它不会撤消提交对
存储库历史记录。
因此,如果您将“还原”视为“撤消”,那么您将始终
错过这部分回复。是的,它会撤消数据,但不,它不会
撤消历史。
在这种情况下,您可能希望先还原上一次还原,这会使历史看起来像这样:
---o---o---o---M---x---x---W---x---Y
/
---A---B-------------------C---D
其中 Y 是 W 的还原。这样的“还原的还原”可以通过以下方式完成:
$ git revert W
这段历史将(忽略 W 和 W..Y 更改之间可能存在的冲突)等同于历史中根本没有 W 或 Y:
---o---o---o---M---x---x-------x----
/
---A---B-------------------C---D
并且再次合并侧分支不会因为之前的revert和revert的revert而产生冲突。
---o---o---o---M---x---x-------x-------*
/ /
---A---B-------------------C---D
当然,在 C 和 D 中所做的更改仍然可能与任何 x 所做的冲突,但这只是正常的合并冲突。