我想删除合并变更集:
$ 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}')"
是否有理由不支持嫁接合并变更集?
答案 0 :(得分:3)
合并变更集有两个父母,因此有两种不同的方式来查看更改的内容。默认情况下,如果使用hg diff -c <changeset>
,它将显示与第一个父项相比较的差异,该父项通常表示合并时的工作目录。如果这个假设是错误的,那么引入错误就是一种简单的方法。
这导致了为什么要移植合并更改集而不是原始变更集本身的问题。如果您想要移植一系列变更集,并且您正在使用合并变更集来“汇总”该系列,则可以一次移植原始的多个更改:hg graft "1000::1005"
。
就我个人而言,我通常会使用hg rebase
来执行此类任务,但这需要在hgrc或mercurial.ini中启用rebase扩展名:
[extensions]
rebase=
答案 1 :(得分:3)
从Mercurial release 4.9命令hg graft
开始,您可以使用一个--base
选项。
hg graft documentation page中说明了其用法:
-base可用于指定除第一个也是唯一的父代之外的另一个祖代。
因此,可以通过指定合并父级之一作为基础,将合并结果作为单个提交反向移植
在您的示例中,如果要相对于父修订版1908移植更改,则可以使用以下命令:
hg graft -r 1909 --base 1908