8

我想移植一个合并变更集:

$ 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}')"

是否有不支持嫁接合并变更集的原因?

4

2 回答 2

4

合并变更集有两个父项,因此有两种不同的方式来查看更改的内容。默认情况下,如果您使用hg diff -c <changeset>它将显示与第一个父级相比的差异,后者通常表示合并时的工作目录。如果这个假设是错误的,这是一种引入错误的简单方法。

这导致了一个问题,即为什么要嫁接合并变更集而不是原始变更集本身。如果您要移植一系列变更集,并且您正在使用合并变更集来“汇总”该系列,则可以一次移植原始的多个更改:hg graft "1000::1005".

就个人而言,我通常hg rebase用于这样的任务,尽管这需要在 hgrc 或 mercurial.ini 中启用 rebase 扩展:

[extensions]
rebase=
于 2013-05-31T17:14:32.920 回答
4

Mercurial 4.9 版开始,命令hg graft有一个--base可用于此目的的选项。hg 移植文档页面
中解释了它的用法:

--base 可用于指定另一个祖先而不是第一个也是唯一的父级。

 

因此,通过将合并父项之一指定为基础,可以将合并的结果向后移植为单个提交

在您的示例中,如果您想移植相对于父版本 1908 的更改,您可以使用以下命令:

hg graft -r 1909 --base 1908
于 2020-01-31T05:13:14.993 回答