如何将 Mercurial 链拆分为在顶端合并的独立更改
How to split a Mercurial chain into independent changes merging at the tip
我开始处理一个提交,我们称之为 C
master - C (tip)
然而,经过一系列的分裂,我最终得到了类似
的结果
master - A - B - C (tip)
事实证明,A
和 B
彼此独立,但 C
依赖于两者。有没有办法以我可以独立处理 A
和 B
的方式拆分此链:
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
。
我开始处理一个提交,我们称之为 C
master - C (tip)
然而,经过一系列的分裂,我最终得到了类似
的结果master - A - B - C (tip)
事实证明,A
和 B
彼此独立,但 C
依赖于两者。有没有办法以我可以独立处理 A
和 B
的方式拆分此链:
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
。