1

我的回购有:

@  2:85bb423103fb99137985c7e218ab4d5896e1aea0:default
|  removed file a
|
| o  1:46b6b63ecf64e8f108c83af85a46fd4c89335d74:b
|/   Modified file a
|
o  0:bbf90d08b30cd007038eaf7f8d3d1215ade86005:default
   Created file a

现在运行 hg merge b,我得到:

hg merge b
remote changed a which local deleted
use (c)hanged version or leave (d)eleted? c
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
(branch merge, don't forget to commit)

现在运行 hg diff,我得到:

hg diff 
diff -r 85bb423103fb a
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/a Wed Oct 09 12:18:45 2013 +0800
@@ -0,0 +1,1 @@
+bbb

我期望的行为是让 /dev/null 进行比较(文件已在 hg 中删除)。hg 状态应显示:

hg status
? a

但是,hg status 显示:

hg status
M a

为什么 Hg 报告此处文件已被修改?

4

1 回答 1

2

我不明白你的困惑。当你在合并过程中被问到这个问题时

use (c)hanged version or leave (d)eleted?

它本质上是说“本地已将其删除,但是您要合并的分支对其进行了更改,这是完全不可调和的行为。您是要在本地将其删除还是要在文件中进行复制分支'b'?” 当您回答c说您希望从中b更改版本时,mercurial 会将该文件放置在适当的位置,就像您完成hg revert --rev b a.

因此,当您这样做时,hg diff它会将您在修订版 2 (/dev/null) 中的任何内容与其中存在的内容进行比较b,因此您会看到所有内容都已添加。

同样,当您这样做时,hg status它的作用就像修订版 2 只是将文件归零,因此现在通过将修订版中存在的所有内容b插入其中来对其进行修改

例如,如果您回答d“已删除”,则在合并后仍将取消添加该文件,您可以这样做hg revert --rev b a,磁盘上的文件内容与回答c情况相同,但该文件将取消添加.

于 2013-10-09T04:54:29.920 回答