我可以将多个连续的变更集合并到Mercurial中的变更集中

时间:2013-05-21 23:06:25

标签: version-control mercurial merge rebase

我们说我有变更集A,我在A之上创建变更集B1,B2和B3,而另一个开发人员在A之上创建变更集C1,C2和C3:

      B1 --- B2 --- B3
     /
--- A
     \
      C1 --- C2 --- C3

另一位开发人员将他的代码推送到中央存储库,现在我想推送我的代码,但我不能因为有多个头。我可以改变我的变更集以继续他(这就是我一直在做的事情),但合并会更准确。

但是,据我所知,我一次只能合并一个变更集。所以我必须将B1合并到C3上创建M1,将B2合并到M1上创建M2,并将B3合并到M2上创建M3。这是我必须执行的三次合并,以及三个新的合并更改集使存储库混乱!有没有办法让我可以同时将B1,B2和B3合并到C3上,或者我是否需要使用rebase来修改历史记录?

1 个答案:

答案 0 :(得分:4)

您可以合并B3和C3以获取:

      B1 --- B2 --- B3
     /                \
--- A                  M
     \                /
      C1 --- C2 --- C3

这是重建两条发展线的传统方式。合并变更集将有两个父项(合并在Mercurial中总是有两个父项)B3和C3,但是您仍然将B1和B3的组合效果与C1和C3的组合效果合并。

实际上,合并只涉及三个状态:A,B3和C3。由于状态B3包含您在B1和B2中所做的更改,因此您最终将B1到B3中的更改合并到状态C3中。

你用三次合并描述的内容实际上是rebase内部的作用!在创建M1到M3之后,它删除这些合并提交的第二个父并删除B1到B3。那就离开了你

--- A --- C1 --- C2 --- C3 --- M1 --- M2 --- M3

其中Mi~ = Bi。正如您所注意到的,这是对存储库中实际发生情况的准确描述不太准确,因为您已将线性化的历史记录实际上并行完成了。