我想移植合并变更集:
$ hg graft -UD --log -r 1909
skipping ungraftable merge revision 1909
我的解决方法是:
hg export -r 1909 | hg import -
hg commit -m"$(hg log -r 1909 --template 'grafted {node}')"
是否有不支持嫁接合并变更集的原因?
合并变更集有两个父级,因此有两种不同的方式来查看变更内容。默认情况下,如果您使用hg diff -c <changeset>
,它将显示与第一个父目录相比的差异,第一个父目录通常代表合并时的工作目录。如果该假设是错误的,则是引入错误的简便方法。
这导致了一个问题,为什么您要嫁接合并变更集而不是原始变更集本身。如果您要嫁接一系列变更集,并且正在使用合并变更集“汇总”该系列,则可以一次嫁接原始的多个变更:hg graft "1000::1005"
。
个人而言,我通常将hg rebase
用于此类任务,尽管这需要在hgrc或mercurial.ini中启用rebase扩展:
[extensions]
rebase=
Mercurial release 4.9开头的命令hg graft
具有可用于此目的的--base
选项。其用法在hg graft documentation page中说明:
-base可用于指定除第一个也是唯一的父代之外的另一个祖代。
因此,可以通过将合并父级之一指定为基础,将合并结果作为单个提交向后移植
在您的示例中,如果要相对于父修订版1908移植更改,则可以使用以下命令:
hg graft -r 1909 --base 1908