gpt4 book ai didi

Mercurial - 撤销旧的 merge

转载 作者:行者123 更新时间:2023-12-02 06:28:04 24 4
gpt4 key购买 nike

我有一个看起来像这样的分支:

A->B->C->D->...->Z
^
1->2-^

其中 C2 及其祖先的 merge 。

我现在意识到我不应该 merge 。我可以回到 B 并移植 D...Z 但这需要大量工作。我可以仅取消 C 吗?

当我尝试hg backout --merge C时,我得到中止:无法取消 merge 变更集

这些更改已推送到中央存储库,我不想修改历史记录或任何内容,我只是想要 2 的逆,它的祖先回到与 的共同后代B.

最佳答案

merge 是公开的,并且此 merge 有公开提交

假设我们有已发布的提交历史记录(顶部是最新的):

                  revZ
|
...
|
revD
|
revC <- unwated merge commit (rev2 to revB)
| \
wanted branch -> revB rev2 <- unwanted branch
| |

相反,我们希望拥有顶级状态,就像我们有这样的历史一样:

                  revZ'
|
...
|
revD'
|
wanted branch -> revB rev2 <- unwanted branch
| |

如何实现这一目标(逐步)

  1. 计算 merge 提交(revD - revZ)到一次提交后的历史记录

    $ hg update -r revC                # Update to merge commit
    $ hg revert --all -r revZ # revert to the newest commit
    $ hg commit -m "collapsed commits" # Create new commit (revTmp1)

    revZ
    |
    ...
    |
    revTmp1 revD
    \ /
    revC
    | \
    revB rev2
    | |
  2. 将 merge 后的更改 (revTmp1) 复制到所需分支 (revB)

    $ hg update -r revB    # Update to the last "wanted" commit before merge
    $ hg graft -r revTmp1 # Copy changes from revTmp1 (create revTmp2 commit)

    revZ
    |
    ...
    |
    revTmp1 revD
    \ /
    revTmp2 revC
    \ / \
    revB rev2
    | |
  3. 创建“撤销”提交

    $ hg update -r revZ                   # Update to the top commit
    $ hg revert --all -r revTmp2 # Copy state revTmp2
    $ hg commit -m "reverted revC merge" # Create revZ' commit

    revZ'
    |
    revZ
    |
    ...
    |
    revTmp1 revD
    \ /
    revTmp2 revC
    \ / \
    revB rev2
    | |
  4. 清理临时提交

    $ hg strip revTmp1 revTmp2

    revZ' <- reverted revC merge
    |
    revZ
    |
    revD
    |
    revC <- unwated merge commit (rev2 to revB)
    | \
    wanted branch -> revB rev2 <- unwanted branch
    | |

关于Mercurial - 撤销旧的 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com