Hg:如何在堆栈中间折叠本地提交

时间:2016-09-27 05:13:17

标签: mercurial

简单问题: 让我们说我有本地提交如下:

master -> a -> b -> c

我想合并a和b。什么是hg命令?我试过了

hg up b
hg fold -r a

收到错误消息:abort: cannot fold chain not ending with a head or with branching

我试过

hg up b
hg amend

这创建了一个类似

的堆栈
master -> a.preamend -> b -> c
                     \-> a

这不允许我继续c。最后,我试过

hg up b
hg histedit a
abort: can only histedit a changeset together with all its descendants

没有运气。我想要的是:

hg up b
hg *merge* -r a

返回

master -> b -> c

提前致谢!

2 个答案:

答案 0 :(得分:3)

关于错误消息

当您的存储库中不允许发生新的不稳定更改时,会出现此错误消息mailto

不稳定的更改是那些其子项未过时的过时更改。您应该在abort: cannot fold chain not ending with a head or with branching中查找experimental.evolution并向其添加hg config

关于折叠变更集

有两种方法可以使用"unstable"折叠堆栈中间的提交。

  1. 使用fold选项:您可以执行--exact。在这种情况下,工作目录的父级是什么并不重要。你必须提到要折叠的修订版。

  2. 使用hg fold -r a -r b --exact更新到您要修剪的最后一个孩子,在这种情况下是b。然后运行hg update -r b。传递给fold的修订版必须是您要折叠的链的初始修订版。

  3. 你有

    hg fold -r a

    你折叠master -> a -> b -> ca,它们已经过时了,因为b有一个没有过时的子b,这是一个不稳定的变更集。

    所以你所做的并没有错,根据你的配置,它是不被允许的。

答案 1 :(得分:0)

如果你想将更改从两个提交压缩到一个提交,那么你可以使用hg rebase命令来压缩更改。

  

$ hg rebase -r a :: b -d master --collapse

这会将a和b提交的更改压缩到一个提交

有关详细信息,请参阅:RebaseExtension