如何使用Mercurial嫁接合并变更集

问题描述 投票:5回答:2

我想移植合并变更集:

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

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

mercurial merge
2个回答
4
投票

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

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

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

[extensions]
rebase=

0
投票

Mercurial release 4.9开头的命令hg graft具有可用于此目的的--base选项。其用法在hg graft documentation page中说明:

-base可用于指定除第一个也是唯一的父代之外的另一个祖代。

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

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

hg graft -r 1909 --base 1908
© www.soinside.com 2019 - 2024. All rights reserved.