将过去的承诺移至其他分支

时间:2019-04-18 00:28:32

标签: mercurial

1 -- 2 -- 3 --------- 7     C
 \         \- 4      /      B
  \------------5----/       A

我最终在Mercurial存储库中获得了上面的分支结构。 我真正想要的是将提交2和3放在分支B上,如下所示:

1 -- 2 -- 3 -- 4  B
 \ ------------5  A

是否有一种很好的方法来追溯获取此结构?

2 个答案:

答案 0 :(得分:1)

我会有点不同意DaveInCaz's answer,但是最后,请同意结论::您应该能够忍受拥有的一切;很好。

从技术上讲,在Mercurial中,一旦您提交了一次提交,它就在一个分支上,而它所在的分支就是您进行该操作时所在的一个分支 。因此,如果您现在在分支C上并进行了提交2和3,那么现在提交2和3就在分支C上,直到永远。

但这对完成工作并不重要。提交4位于分支B上,提交4的父级为提交3,其父级为提交2。通常,它们在其他分支上并不重要。

(此设置与Git完全不同:在Git中,提交位于 all 分支上,从中可以到达其提示。可以随时创建和销毁分支提示名称,指向任何现有提交。这意味着某个提交所处的分支集从一天更改为另一天。实际上,Git中的分支名称没有任何内在含义,您可以随时添加,删除或更改任何名称。 提交不会更改,但到达会执行的分支名称集却会更改。)

如果由于某种原因(例如某些外部工具要求提交的分支 name B而不是C),您确实确实想要或需要要移动这些提交,答案是您根本无法移动,但是您可以 复制

C: 1 -- 2 -- 3 --------- 7
B:  \         \- 4      /
A:   \------------5----/

可以成为:

C: 1 -- 2 -- 3 ------------------ 7
   |\         \                  /
 B | \         4                /
B: |  \                        /
 B |   -------- 2b - 3b - 4b  /
    \                        /
A:   ---------------------- 5

请注意,在将2复制到2b并将3复制到3b之后,现在还必须将4复制到4b44b都在分支B上,分支B现在有两个头。

如DaveInCaz所述,您可以删除不需要的提交。如果它们存在于您与之交谈的其他克隆中,则每次您与该克隆进行交谈时,它们都会再次出现,除非您也剥离它们那里

答案 1 :(得分:0)

您已经拥有所需的结构,只是在其顶部添加了7个。

如果没有将7推送到任何地方(或者至少没有推送到您无法控制的任何克隆),则可以hg strip推送。

如果已公开推送7,则无法再使用strip删除它,因为其他克隆仍将拥有它。但是您可以忽略它,而只是根据需要从4或5继续工作。不需要更改以7作为父项的情况。