我的修订图表如下:
F
|
E
|\
| |
C |
| D
| |
B |
| |
|/
|
A
我想将从B到F的所有提交折叠成一个提交。 A不是我的,我也不想触摸它。我最终想拥有:
X
|
A
这可能吗?我尝试了各种崩溃和rebase命令,但无法做到这一点。
答案 0 :(得分:2)
您可以使用补丁队列的mq
扩展名完成此操作。您将需要删除合并变更集(因为我认为您不能qimport
合并)并重新排序补丁(可能需要手动合并补丁文件)。
hg qimport --rev F --name F
hg qpop
hg strip -r tip
- 这会删除合并变更集hg qimport -r C -n C
hg qpop
hg qimport -r B -n B
hg qpop
hg qimport -r D -n D
- 现在您在补丁队列中有所有4个更改(D,B,C,F)此时您可以hg qpush --all
应用所有补丁,您需要解决导致拒绝补丁的所有冲突。这是手动重做合并变更集E
之前完成的工作。通过编辑和hg qref
命令完成后,qpop
除D
以外的所有修补程序。
hg qfold B C F
- 这会将B,C和F补丁合并到补丁D hg qfin D
- 这会将补丁D转换为最终的变更集还有一些说明:
hg strip
或将其相位更改为secret
)。E
做了大量工作(即B + C和D之间存在冲突),则9到10之间的额外步骤将会很混乱,因为您的典型合并工具不可用。 我给你的后续问题:为什么?您希望实现什么目标?使用较小的变更集进行分支和合并是DVCS的标准操作过程。经过一些更改后,所有这些更改将滚动到历史记录中,永远不会再次出现。担心完美的历史图表实际上是不必要的。