如何将 Mercurial 链拆分为在顶端合并的独立更改

How to split a Mercurial chain into independent changes merging at the tip

我开始处理一个提交,我们称之为 C

master - C (tip)

然而,经过一系列的分裂,我最终得到了类似

的结果

master - A - B - C (tip)

事实证明,AB 彼此独立,但 C 依赖于两者。有没有办法以我可以独立处理 AB 的方式拆分此链:

master - A - merge - C (tip)
      \     /
        - B 

只要您还没有推送更改,就可以执行此操作。如果您已经推送并且其他人已经复制了原始系列 A-B-C 变更集,您将无法轻易撤消它。

实际上有几种方法可以做到这一点...这是我认为最直接的。

第 1 步:

hg up master

hg revert -r B

hg commit(考虑这个B2

所以现在 B2 看起来像原来的 B 但遵循 master 而不是 A。原来的B暂时还存在:

master - A - B - C
       \
         B2

第 2 步:

hg merge -r A

hg revert -r C

hg commit(考虑这个C2

现在你有:

master - A  - B - C
       \    \
         B2 - C2

第 3 步:

终于清理掉你原来不需要的B & C:

hg strip B

请注意,strip 在技术上是一个扩展,因此您可能必须在 hgrc 中启用它。

注释 - 在第 1 步中,您还可以使用 graft 而不是 revert 来将 B 复制到 B2。我倾向于使用 revert,因为它更通用,但它确实需要 graft 会避免的显式 commit