如何在Git中撤销快进合并,而不使用重置

3

想象一下这种情况:

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个回答

4

如果你不希望重写已经发布的历史记录,那么git revert是你的好帮手。

在这种情况下:

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

如果你希望在一个提交中还原,或者

git revert M..A

如果你想要每个原始提交有一个反转提交,而且是按照相反的顺序排列的,那么可以这样做。

即使提交 A 和 B/C 有冲突,它是否可靠地工作? - Mifeet
是的,它应该这样做。如果有冲突,还原操作将停止,要求您解决冲突,然后您可以执行 git revert --continue。如果这个选项和 -n 不兼容,使用第二种选择,在所有内容都被还原后使用 git rebase -i 来压缩提交(如果需要的话)。 - Vampire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接