1 -- 2 -- 3 --------- 7 C
\ \- 4 / B
\------------5----/ A
我最终在Mercurial存储库中获得了上面的分支结构。 我真正想要的是将提交2和3放在分支B上,如下所示:
1 -- 2 -- 3 -- 4 B
\ ------------5 A
是否有一种很好的方法来追溯获取此结构?
答案 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
复制到4b
。 4
和4b
都在分支B
上,分支B
现在有两个头。
如DaveInCaz所述,您可以删除不需要的提交。如果它们存在于您与之交谈的其他克隆中,则每次您与该克隆进行交谈时,它们都会再次出现,除非您也剥离它们那里。
答案 1 :(得分:0)
您已经拥有所需的结构,只是在其顶部添加了7个。
如果没有将7推送到任何地方(或者至少没有推送到您无法控制的任何克隆),则可以hg strip
推送。
如果已公开推送7,则无法再使用strip
删除它,因为其他克隆仍将拥有它。但是您可以忽略它,而只是根据需要从4或5继续工作。不需要更改以7作为父项的情况。