在Mercurial中,如果没有合并,线条如何消失?

jam*_*box 2 mercurial

使用mercurial,我遇到了一个奇怪的问题,一个提交者的一行在时间线的某个点消失了,我无法解释它为什么.

日志看起来像这样:

changeset:   172:xyz123
parent:      76:pqr345
user:        barry baggings
date:        Mon Jan 16 0:12:43 2012 +0000
summary:     blah blah blah

changeset:   171:opq123
parent:      165:abc234
user:        mary moggings
date:        Mon Feb 01 1:12:41 2012 +0000
summary:     naw naw naw
Run Code Online (Sandbox Code Playgroud)

正在运行:hg diff -r 171 -r 172为abc.py提供此内容(标题省略):

print "context line1"
- print "i need this line!"
print "context line2"
Run Code Online (Sandbox Code Playgroud)

有问题的mod print "i need this line!肯定是在171中引入的:opq123但它在172中再次出现:xyz123,

但76和172之间的差异显示abc.py没有mods!巴里如何能够像这样超越玛丽的变化?

我只是误解了这一切是如何运作的?我在CVS和SVN这样的事情上有相当不错的背景,但DVCS有时让我头疼......有人可以解释一下吗?

我有点怀疑它是因为我们在mercurial 1.7.1 - 它可能是一个错误吗?

Chr*_*gan 6

这些是单独的头,172不是基于171.图表,如果您启用并运行graphlog扩展hg glog,或者如果您运行hg serve,可以从hgweb直观地看到,在浏览器中打开它并单击"图形" "链接,显示它可能比变更集的"父"值更清楚.

o    changeset:   172:xyz123
|    parent:      76:pqr345
|    user:        barry baggings
|    date:        Mon Jan 16 0:12:43 2012 +0000
|    summary:     blah blah blah
|    
| o  changeset:   171:opq123
| |  parent:      165:abc234
| |  user:        mary moggings
| |  date:        Mon Feb 01 1:12:41 2012 +0000
| |  summary:     naw naw naw
| |
Run Code Online (Sandbox Code Playgroud)

这清楚地表明变更集172不是基于变更集171.因此,在比较它们时,变化可以在其他地方发生.你不是在比较一个祖先和后代,你在某种程度上比较堂兄弟.

因此,当您在171中引入它时,因为172不是基于171,所以它不会添加该行.实际上,合并是获得更改所需要的,创建一个基于171和172(以及它们的祖先,直到它们收敛)的变更集.

您可能有更多想要合并的头; 你可以hg heads用来看看它们.hg serve也可以非常有助于理解这些事情.