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

如何在不使用重置的情况下撤消git中的快进合并,git,merge,undo,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 F

想象一下这个场景:

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的一个问题。我们如何撤销该功能分支快速合并到发布候选分支中所引入的更改

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


还请注意,我只在每个功能分支上显示了一个提交,但是在有多个提交要撤消的情况下,解决方案应该可以工作

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

在这种情况下:

git revert M..A -n
git commit -m "revert feature-A"
如果希望在一次提交中恢复,或

git revert M..A

如果您希望按相反的顺序对每个原始提交执行一次还原提交。

即使提交A和B/C有冲突,该操作是否可靠?是的,应该如此。如果存在冲突,恢复将停止,请您解决冲突,然后您可以执行
git revert--continue
。如果这在
-n
选项中不起作用,请使用第二个变量,并在恢复所有内容后,如果需要,使用
git-rebase-i
挤压提交。