1

假设我有变更集 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 上,还是我必须满足于使用变基来修改历史记录?

4

1 回答 1

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。正如您所注意到的,这是对存储库中实际发生的事情的不太准确的描述,因为您已经线性化了实际并行完成的历史。

于 2013-05-22T06:55:32.477 回答