给定此存储库:

A1 - A2 - A3 - A4 - A5


..您执行hg pull,它从远程仓库中提取了另外两个变更集,从而使您有了两个头:

A1 - A2 - A3 - A4 - A5
        \
          B3 - B4


假设您执行hg merge会得到M1 merge changeset

A1 - A2 - A3 - A4 - A5----\
        \                   M1
          B3 - B4 --------/


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

如果您执行hg diff -c M1,则会看到:


在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上)。

不,推送合并不会真正以任何您认为多余的方式重复更改。我唯一看到重复更改的时间是有人重新设定从其他地方拉出或已经推送的变更集的基础。

08-27 18:43