我想移植一个合并变更集:
$ 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 4.9 版开始,命令hg graft
有一个--base
可用于此目的的选项。hg 移植文档页面
中解释了它的用法:
--base 可用于指定另一个祖先而不是第一个也是唯一的父级。
因此,通过将合并父项之一指定为基础,可以将合并的结果向后移植为单个提交
在您的示例中,如果您想移植相对于父版本 1908 的更改,您可以使用以下命令:
hg graft -r 1909 --base 1908