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

为什么Mercurial合并变更集包含没有冲突的项?,mercurial,merge,Mercurial,Merge,给定此存储库: A1 - A2 - A3 - A4 - A5 。。您可以hg pull从远程回购中再引入两个变更集,给您两个头: A1 - A2 - A3 - A4 - A5 \ B3 - B4 假设您执行hg merge,这将得到M1: 所以现在一个hg out将列出M1 如果您执行hg diff-cm1操作,您会看到: 在B3和B4中添加的文件 在B3和B4中修改且没有冲突的文件的差异(在A3-A5中未修改文件) 为什么M1合并变更集包含这些项?为

给定此存储库:

A1 - A2 - A3 - A4 - A5
。。您可以
hg pull
从远程回购中再引入两个变更集,给您两个头:

A1 - A2 - A3 - A4 - A5
        \
          B3 - B4
假设您执行hg merge,这将得到M1:

所以现在一个
hg out
将列出M1

如果您执行
hg diff-cm1
操作,您会看到:

  • 在B3和B4中添加的文件
  • 在B3和B4中修改且没有冲突的文件的差异(在A3-A5中未修改文件)
为什么M1合并变更集包含这些项?为什么需要将此变更集推送到远程存储库


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

我认为最简单的方式是B3和B4将A2作为构建变更的基础。为了将所有内容恢复为1而不是2,合并表示一个变更集,该变更集接受B3和B4中的所有变更,并将其应用于A5之上

看起来像这样的另一部分原因是,当您合并B4时,您在A5上。如果您在B4上进行合并,则合并将在B4上显示A3、A4和A5的更改(当您调用
hg diff-c M1
时,您将在B4上)


不,推动合并不会以任何方式复制您会注意到的多余更改。我唯一一次看到重复的更改是当有人重新调整从其他地方提取的更改集或已经推送的更改集时。

diff-c
只会在更改集和它的第一个(左)父项(在您的例子中是A5)之间创建一个差异。因此,它显示了由于从远程合并而在分支上发生的所有更改。

谢谢-仍然不能完全确定为什么这不会复制远程回购中的更改。我猜在混合中有一些变化无常的魔力。
diff
是“查看”变更集内容的正确方式吗?我认为
export
应该占据这个位置。然而,变更集的“内容”是一个相当哲学的问题。实际上,内容只是文件和元数据。
A1 - A2 - A3 - A4 - A5----\
        \                   M1
          B3 - B4 --------/