【问题标题】:How to undo a fast-forward merge in git without using reset如何在不使用重置的情况下撤消 git 中的快进合并
【发布时间】:2016-09-04 05:50:33
【问题描述】:

想象一下这个场景:

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 存在问题。我们如何撤消此功能分支快速向前合并到发布候选分支所引入的更改?

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

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

【问题讨论】:

    标签: git merge undo


    【解决方案1】:

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

    在这种情况下:

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

    如果你想在一次提交中恢复,或者

    git revert M..A
    

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

    【讨论】:

    • 即使提交 A 和 B/C 有冲突,它是否也能可靠地工作?
    • 是的,应该。如果有冲突,revert 将停止,请您解决冲突,然后您可以做git revert --continue。如果 -n 选项不能很好地工作,请使用第二个变体,并在所有内容恢复后使用 git rebase -i 压缩提交(如果需要)。
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2014-10-27
    • 2018-07-09
    • 1970-01-01
    相关资源
    最近更新 更多