(怎么样)我可以崩溃提交分支

时间:2014-11-18 16:22:27

标签: mercurial

我的修订图表如下:

F
|
E
|\
| |
C |
| D
| |
B |
| |
|/
|
A

我想将从B到F的所有提交折叠成一个提交。 A不是我的,我也不想触摸它。我最终想拥有:

X
|
A

这可能吗?我尝试了各种崩溃和rebase命令,但无法做到这一点。

1 个答案:

答案 0 :(得分:2)

您可以使用补丁队列的mq扩展名完成此操作。您将需要删除合并变更集(因为我认为您不能qimport合并)并重新排序补丁(可能需要手动合并补丁文件)。

  1. hg qimport --rev F --name F
  2. hg qpop
  3. hg strip -r tip - 这会删除合并变更集
  4. hg qimport -r C -n C
  5. hg qpop
  6. hg qimport -r B -n B
  7. hg qpop
  8. hg qimport -r D -n D - 现在您在补丁队列中有所有4个更改(D,B,C,F)
  9. 此时您可以hg qpush --all应用所有补丁,您需要解决导致拒绝补丁的所有冲突。这是手动重做合并变更集E之前完成的工作。通过编辑和hg qref命令完成后,qpopD以外的所有修补程序。

    1. hg qfold B C F - 这会将B,C和F补丁合并到补丁D
    2. hg qfin D - 这会将补丁D转换为最终的变更集
    3. 还有一些说明:

      • 与往常一样,在开始之前备份您的工作(文件夹的副本很好)。您还可以在步骤之后使用diff工具来比较原始和结果,以确保您不会遗漏任何内容。
      • 如果您已将任何这些更改集推送到另一个仓库,则需要将其删除(使用hg strip或将其相位更改为secret)。
      • 如果合并变更集E做了大量工作(即B + C和D之间存在冲突),则9到10之间的额外步骤将会很混乱,因为您的典型合并工具不可用。

      我给你的后续问题:为什么?您希望实现什么目标?使用较小的变更集进行分支和合并是DVCS的标准操作过程。经过一些更改后,所有这些更改将滚动到历史记录中,永远不会再次出现。担心完美的历史图表实际上是不必要的。