2016-09-27 56 views
1

简单的问题中间折叠本地提交: 比方说,我有本地提交下列一样:汞:如何在堆栈

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 

提前感谢!

回答

0

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

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

这将壁球既有的变化和b犯一犯

更多信息请参阅:RebaseExtension

+0

我应该HG更新/结帐B或运行在这之前? – Ender

+0

你必须更新并签出master分支才能运行此操作,因为a和b都提交了不需要签出a或b –

+1

这给出了一个错误: 'abort:无法删除未重新生成的后代的原始更改集。 --keep保持原有的变更)' – Ender

3

关于错误信息

此错误消息说当您的存储库中不允许新的不稳定更改时,会发生abort: cannot fold chain not ending with a head or with branching

不稳定的变化是那些孩子没有过时的过时变化。您应该在hg config中查找experimental.evolution并将其添加"unstable"

关于折叠变更

有两种方式折叠使用fold在堆栈中提交。

  1. 使用--exact选项:你可以做hg fold -r a -r b --exact。在这里,你的工作目录的父母是什么并不重要。你必须提到要折叠的修订版。

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

你有

master -> a -> b -> c

您折叠ab,他们变得过时,因为b有一个孩子c这是不是过时了,它是一个不稳定的变更。

所以,你在做什么并没有错,它只是没有按照您的配置所允许的。