当在当前分支上删除此文件时,为什么hg status在合并后将已删除的文件报告为已修改?

时间:2013-10-09 04:39:22

标签: mercurial

我的回购有:

@  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报告此处文件已被修改?

1 个答案:

答案 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案件相同,但文件将被取消添加。