将线性历史拆分为Mercurial中的两个分支

sho*_*nex 4 mercurial

我有一个mercurial存储库历史记录,如下所示:

A -> B -> C -> N1 -> N2 -> N3 -> D -> E -> F
Run Code Online (Sandbox Code Playgroud)

我想将其转换为以下历史:

A -> B -> C -> D -> E -> F
           \_ N1 -> N2 -> N3
Run Code Online (Sandbox Code Playgroud)

鉴于我有一个克隆历史在C停止的克隆,最好的方法是什么?DEF变更集与N1 N2 N3变更集不冲突.好吧,至少我希望如此;)

Hel*_*lgi 6

无需克隆,您可以在原始仓库中工作.您可以在C之上移植D,E和F,创建副本D1,E1和F1(如果没有冲突的变化,它将与原始副本相同).你会有这个:

A -> B -> C -> N1 -> N2 -> N3 -> D -> E -> F
           \_ D1 -> E1 -> F1
Run Code Online (Sandbox Code Playgroud)

然后你可以剥离原件.请参阅下面的脚本.

$ hg update C
$ hg transplant D E F
$ hg strip D
Run Code Online (Sandbox Code Playgroud)

您必须启用两个扩展名:transplantmq.为此,请将以下行添加到您的hgrc:

[extensions]
transplant=
mq=
Run Code Online (Sandbox Code Playgroud)

更新:从Mercurial 2.0开始,graft可以使用(内置命令)代替transplant此处; 正如劳伦斯霍尔斯特所暗示的那样,rebase 应该同样有效.