为什么Mercurial合并变更集包含没有冲突的项目?

Mar*_*eon 2 merge mercurial

鉴于此存储库:

A1 - A2 - A3 - A4 - A5
Run Code Online (Sandbox Code Playgroud)

..你做的hg pull是从远程仓库中获取另外两个变更集,给你两个脑袋:

A1 - A2 - A3 - A4 - A5
        \
          B3 - B4
Run Code Online (Sandbox Code Playgroud)

假设你这样做hg merge可以获得M1 合并变更集:

A1 - A2 - A3 - A4 - A5----\
        \                   M1
          B3 - B4 --------/
Run Code Online (Sandbox Code Playgroud)

所以现在hg out将列出M1 ......

如果你这样做,hg diff -c M1你会看到:

  • B3和B4中添加的文件
  • 在B3和B4中修改过的文件的差异没有冲突(文件未在A3-A5中修改)

为什么M1合并变更集包含这些项目?为什么需要将此变更集推送到远程存储库?

这些更改已存在于远程存储库中的B3和B4中.我理解为什么合并变更集会包含A3-A5和B3-B4都有变化的文件,并导致文件的新合并版本.但我不明白为什么变更集会包含没有冲突的项目.M3的推送不会重复已经在远程仓库中的更改吗?

Joe*_*ant 5

我能想到的最简单的方法是B3和B4将A2作为构建其变化的基础.为了将所有内容都恢复到1个头而不是2个,合并代表一个变更集,它接受B3和B4中的所有更改并将它们应用于A5之上.

另一部分原因就是你在合并B4时在A5上.如果你已经在B4并且合并了,那么合并将在B4之上显示A3,A4和A5的变化(当你打电话时你会在B4上hg diff -c M1).

不,推动合并并不会以任何你注意到的冗余方式真正重复变更.我看到重复更改的唯一一次是当有人重新调整他们从其他地方撤出或已被推动的变更集时.