两个分支我有一个Mercurial库的历史,看起来像这样:拆分线性的历史成水银
A -> B -> C -> N1 -> N2 -> N3 -> D -> E -> F
而且我想将它转变成以下病史:
A -> B -> C -> D -> E -> F
\_ N1 -> N2 -> N3
鉴于我有一个克隆,它的历史停在C处,最好的方法是什么? D E F变更集与N1 N2 N3变更集不冲突。那么,至少我希望如此;)
两个分支我有一个Mercurial库的历史,看起来像这样:拆分线性的历史成水银
A -> B -> C -> N1 -> N2 -> N3 -> D -> E -> F
而且我想将它转变成以下病史:
A -> B -> C -> D -> E -> F
\_ N1 -> N2 -> N3
鉴于我有一个克隆,它的历史停在C处,最好的方法是什么? D E F变更集与N1 N2 N3变更集不冲突。那么,至少我希望如此;)
没有必要有一个克隆,你可以在原来的回购工作。您可以将D,E和F移植到C的顶部,创建副本D1,E1和F1(如果没有冲突的变化,它们将与原始文件相同)。你会有这样的:
A -> B -> C -> N1 -> N2 -> N3 -> D -> E -> F
\_ D1 -> E1 -> F1
然后你可以去掉原件。请参阅下面的脚本。
$ hg update C
$ hg transplant D E F
$ hg strip D
你必须使两个扩展:transplant
和mq
。要做到这一点,这些行添加到您的hgrc
:
[extensions]
transplant=
mq=
更新:由于水银2.0,graft
(内置命令)可以用来代替transplant
这里;如Laurens Holst suggests,应该工作得很好。
您可以使用rebase
此:
hg rebase --source D --dest C
这可以作为水银2.0;此前,它曾经投诉到重新修订祖先版本时,但他们删除了该版本。
您必须启用,如果您尚未:
[extensions]
rebase =
看来你只需要衍合上的C顶部d,你甚至不需要克隆。一些GUI可能会让你做到这一点。我不知道确切的命令,但MQ扩展名用于重新绑定,将DEF拆分为队列并将其粘贴回C. – 2011-12-11 21:36:00
@herby我不认为'rebase'命令将帮助shodanex完成任务,所以我不会用_rebasing_来描述解决方案。除此之外,我认为“移植”更简单,但“mq”同样适用。 – Helgi
我并不知道第二个项目:“有些情况下不允许重新定位过程: - 重新定位点(源)是目标的祖先 - 重新定位点(源)是目标的后代 “。 – 2011-12-11 22:08:14