Version control 我可以在Mercurial中将多个连续的变更集合并到一个变更集中吗

Version control 我可以在Mercurial中将多个连续的变更集合并到一个变更集中吗,version-control,mercurial,merge,rebase,Version Control,Mercurial,Merge,Rebase,假设我有变更集A,我在A上创建了变更集B1、B2和B3,而另一个开发人员在A上创建了变更集C1、C2和C3: B1 --- B2 --- B3 / --- A \ C1 --- C2 --- C3 另一个开发人员将他的代码推送到中央存储库,现在我想推送我的代码,但我不能,因为有多个头。我可以重新设置我的变更集的基础,使其位于他的变更集之上(这就是我一直在做的),但合并会更准确 然而,据我所知,我一次只能合并一个变更集。因此,我必须将B1合并到C3,生

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

您可以合并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。正如您所注意到的,这是存储库中实际发生情况的不太准确的图片,因为您已经将实际并行执行的历史进行了线性化。

您可以合并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。正如您所注意到的,这是存储库中实际发生的情况的不太准确的图片,因为您已经将实际并行执行的历史进行了线性化。

哦,好的!我想尝试一下,但出于某种原因,我的大脑认为它只是合并了B3的变化,而不是B1和B2的变化。哦,好吧!我想尝试一下,但出于某种原因,我的大脑认为它只是合并了B3的变化,而不是B1和B2的变化。