如何使用Mercurial移植合并变更集

Tho*_*ung 5 merge mercurial

我想嫁接合并变更集:

$ hg graft -UD --log -r 1909
skipping ungraftable merge revision 1909
Run Code Online (Sandbox Code Playgroud)

我的解决方法是:

 hg export -r 1909 | hg import - 
 hg commit -m"$(hg log -r 1909 --template 'grafted {node}')"
Run Code Online (Sandbox Code Playgroud)

是否有理由不支持嫁接合并变更集?

wip*_*wip 5

Mercurial 版本 4.9开始,命令hg graft有一个--base选项可用于此目的。\n它的用法在hgraft 文档页面
中有解释

\n\n
\n

--base 可用于指定第一个且唯一的父代之外的另一个祖先。

\n
\n\n

\xe3\x80\x80

\n\n
\n

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

\n
\n\n

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

\n\n
hg graft -r 1909 --base 1908\n
Run Code Online (Sandbox Code Playgroud)\n


Edw*_*ard 4

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

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

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

[extensions]
rebase=
Run Code Online (Sandbox Code Playgroud)

  • 动机是嫁接合并变更集比合并嫁接单个变更集更容易。还存在从第二个分支嫁接单个变更集并不明显的情况。就我而言,变基不适用。变更集已经公开。 (4认同)