我有一个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变更集不冲突。好吧,至少我希望如此;)
答案 0 :(得分:6)
无需克隆,您可以使用原始仓库。您可以在C之上移植D,E和F,创建副本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=
更新:从Mercurial 2.0开始,可以使用graft
(内置命令)代替transplant
;像Laurens Holst suggests一样,rebase应该同样有效。
答案 1 :(得分:2)
您可以使用rebase
:
hg rebase --source D --dest C
这适用于Mercurial 2.0;以前,它曾经在重新定位到祖先版本时抱怨,但他们删除了。
您必须启用rebase extension,如果您还没有:
[extensions]
rebase =