如何在不使用reset的情况下撤消git中的快进合并

时间:2016-05-09 14:29:39

标签: git merge undo

想象一下这种情况:

master:            M
release-candidate:  \     A--B'--C'
feature-A:           \-A-/  /   /
feature-B:            \-B--/   /
feature-C:             \--C---/

使用以下命令创建候选发布版:

git co master
git co -b release-candidate
git merge feature-A (FAST FORWARD)
git merge feature-B (REGULAR MERGE)
git merge feature-C (REGULAR MERGE)

让我们说在我们的预发布测试期间,我们发现了功能A的问题。我们如何撤消此功能分支快速合并到发布候选分支所引入的更改?

我们可能会将发布候选者重置回其主状态并再次开始合并所有有效功能,但这将意味着重复大量合并冲突解决并引入错误的可能性。

另请注意,我只在每个功能分支上显示了一个提交,但解决方案应该适用于有多个提交撤消的情况。

1 个答案:

答案 0 :(得分:3)

由于您不想重写已发布的历史记录,git revert是您的朋友。

在这种情况下:

git revert M..A -n
git commit -m "revert feature-A"

如果您希望在一次提交中恢复,或

git revert M..A

如果你想以相反的顺序对每个原始提交进行一次恢复提交。