Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 如何将Mercurial链拆分为独立的更改,并在顶端合并_Version Control_Mercurial - Fatal编程技术网

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-B
hg-merge-A
hg-rebase-s-C-d mergedAB'
hg-B-d-master
hg-merge-A
hg-strip mergedAB'
hg-strip-B'
这让我保留了这道菜该嫁接为临时性的,保留原有的A和B。不过,您使用
hg revert
而不是
hg graft
的方法更加通用。我将尝试修改您的方法,同时保持原始分支完好无损。@user34812这听起来很合理。我在这个答案中建议使用该方法的一个原因是,它完全保留了原始提交序列,直到您100%准备删除它。如果需要,您可以完全取消更改,而不破坏任何原始内容。