如何用多个后代头来压制多变的修正

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

在推送到我们的主存储库之前,我正在尝试清理一些本地(草稿)mercurial历史。我想采取的一个步骤是将“Fixup”变更集压缩/滚动到其父级。我的历史看起来像这样:

o  [draft] 14 X
|
| o  [draft] 13 Y
|/
o  [draft] 12 Fixup
|
o  [draft] 11 Thing to Fix
|
o  [draft] 10 Z
|
~

完成后,它应如下所示:

o  [draft] 13 X
|
| o  [draft] 12 Y
|/
o  [draft] 11 Thing to Fix with Fixup
|
o  [draft] 10 Z
|
~

显然,将两个提交一起滚动不应该产生任何冲突,因为后代的代码是不受影响的。但是,我无法找到一种方法来让hetedit允许我在我的历史记录中进行编辑,因为它需要编辑“变更集及其所有后代”。

这个编辑可以吗?应该怎么做?

version-control mercurial
1个回答
2
投票

这当然是可能的。不过,我不知道该怎么做。

诀窍是转向:

o  [draft] 14 X
|
| o  [draft] 13 Y
|/
o  [draft] 12 Fixup
|
o  [draft] 11 Thing to Fix
|
o  [draft] 10 Z
|
~

成:

o   [draft] 16 Fixup
|
o   [draft] 15 Thing to Fix
|
| o  [draft] 14 X
| |
| | o  [draft] 13 Y
| |/
| o  [draft] 12 Fixup
| |
| o  [draft] 11 Thing to Fix
|/
o  [draft] 10 Z
|
~

其中15是11的副本,16是12的副本。(使用hg graft执行此操作。)现在可以使用hg histedit将这两者结合起来。

现在很容易复制13和14顶部的新15替换旧的15和16:

o  [draft] 17 X
|
| o   [draft] 16 Y
|/
o   [draft] 15 Thing to Fix with Fixup
|
| o  [draft] 14 X
| |
| | o  [draft] 13 Y
| |/
| o  [draft] 12 Fixup
| |
| o  [draft] 11 Thing to Fix
|/
o  [draft] 10 Z
|
~

现在你可以hg strip -r 11删除11,12,13和14,只留下更正的提交。 (请注意,您可以使用rebase来简化这一点。长形式主要用于说明和易于理解。)

© www.soinside.com 2019 - 2024. All rights reserved.