在 Mercurial 中,当历史包含合并时如何编辑过去的变更集?
In Mercurial, how to edit a past changeset when the history contains merges?
我有以下历史:
@ 4 changesABC tip
|\
| o 3 changesAB
| |
o | 2 changesAC
|/
o 1 changeA
|
o 0 initial.
现在我想对变更集 1 进行更改,以便该更改反映在其后代中。如果我尝试:
hg histedit 1
我得到:
abort: cannot edit history that contains merges
有什么办法解决这个问题吗?我发现这种情况很常见;如果我能做到这一点,那将非常有帮助。
没有简单的方法可以做到这一点,这也适用于(仍然)进化扩展(请注意,它仍然表示为实验性的)。然而,当尝试与你一样的事情时,进化活跃,它建议:
Abbort: no support for evolving merge changesets yet
(Redo the merge and use 'hg prune <old> --succ <new>' to obsolete the old one)
启用了进化扩展的工作流程将如下所示:
hg up 1
(make changes)
hg evolve -a
然后您需要按照建议重新进行合并,然后您应该完成(请使用适当的修订,只需用心输入):
hg merge -r6
hg prune 4 --succ NEW_MERGE_CHANGESET
请注意,这仅适用于非 public 变更集,因此您需要在这些操作之前强制进行相变。
我有以下历史:
@ 4 changesABC tip
|\
| o 3 changesAB
| |
o | 2 changesAC
|/
o 1 changeA
|
o 0 initial.
现在我想对变更集 1 进行更改,以便该更改反映在其后代中。如果我尝试:
hg histedit 1
我得到:
abort: cannot edit history that contains merges
有什么办法解决这个问题吗?我发现这种情况很常见;如果我能做到这一点,那将非常有帮助。
没有简单的方法可以做到这一点,这也适用于(仍然)进化扩展(请注意,它仍然表示为实验性的)。然而,当尝试与你一样的事情时,进化活跃,它建议:
Abbort: no support for evolving merge changesets yet
(Redo the merge and use 'hg prune <old> --succ <new>' to obsolete the old one)
启用了进化扩展的工作流程将如下所示:
hg up 1
(make changes)
hg evolve -a
然后您需要按照建议重新进行合并,然后您应该完成(请使用适当的修订,只需用心输入):
hg merge -r6
hg prune 4 --succ NEW_MERGE_CHANGESET
请注意,这仅适用于非 public 变更集,因此您需要在这些操作之前强制进行相变。