Version control 如何将Mercurial链拆分为独立的更改,并在顶端合并
我开始进行提交,我们称之为Version control 如何将Mercurial链拆分为独立的更改,并在顶端合并,version-control,mercurial,Version Control,Mercurial,我开始进行提交,我们称之为C master-C(提示) 然而,在一系列的分裂之后,我最终得到了类似的结果 master-A-B-C(提示) 事实证明,A和B是相互独立的,但C取决于两者。是否有一种方法可以拆分此链,使我可以独立处理a和B: master - A - merge - C (tip) \ / - B 您可以这样做,只要您还没有推动您的更改。如果你推过,而其他人复制了原始的A-B-C变更集系列,你就无法轻易撤销它 实际上有几种方法可以做到这一点。
C
master-C(提示)
然而,在一系列的分裂之后,我最终得到了类似的结果
master-A-B-C(提示)
事实证明,A
和B
是相互独立的,但C
取决于两者。是否有一种方法可以拆分此链,使我可以独立处理a
和B
:
master - A - merge - C (tip)
\ /
- B
您可以这样做,只要您还没有推动您的更改。如果你推过,而其他人复制了原始的
A-B-C
变更集系列,你就无法轻易撤销它
实际上有几种方法可以做到这一点。。。这是我认为最直接的
步骤1:
hg up master
hg还原-rb
hg提交
(考虑这个B2
)
因此,现在的B2
看起来像原始的B,但遵循master
而不是A
。原来的B
现在仍然存在:
master - A - B - C
\
B2
步骤2:
hg合并-ra
hg还原-rc
hg提交
(考虑这个C2
)
现在你有:
master - A - B - C
\ \
B2 - C2
步骤3:
最后清理掉原来不需要的B
和C
:
hg带B
请注意,从技术上讲,strip是一个扩展,因此您可能必须在hgrc
中启用它
注释-在步骤1中,您还可以使用
graft
而不是revert
将B
复制到B2
。我倾向于使用revert
,因为它更通用,但它确实需要一个明确的commit
,而graft
可以避免这种情况。谢谢,我实际上做了一些类似但略有不同的事情,不久后我问了一个问题:hg-up-master
hg-graft-Bhg-merge-A
hg-rebase-s-C-d mergedAB'
hg-B-d-master
hg-merge-Ahg-strip mergedAB'
hg-strip-B'
这让我保留了这道菜该嫁接为临时性的,保留原有的A和B。不过,您使用hg revert
而不是hg graft
的方法更加通用。我将尝试修改您的方法,同时保持原始分支完好无损。@user34812这听起来很合理。我在这个答案中建议使用该方法的一个原因是,它完全保留了原始提交序列,直到您100%准备删除它。如果需要,您可以完全取消更改,而不破坏任何原始内容。