我的回购有:
@ 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状态显示:
hg status
M a
为什么Hg报告此处文件已被修改?
答案 0 :(得分: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
案件相同,但文件将被取消添加。