正如您所发现的那样,Mercurial 会在您更新时将工作副本中的更改合并到目标修订中。
如果合并是干净的(从 Mercurial 的角度来看),受影响的文件将被标记为“已解决”。你可以检查这个
$ hg resolve --list
它将显示一堆带有R
for 已解决的文件。未解析的文件以U
. 在hg resolve
处理文件之前,您必须先将其标记为未解决:
$ hg resolve --unmark your-file
这是一个完整的会话,我在其中创建了一个包含两个提交的提交:
$ hg init
$ echo x > x
$ hg commit -A -m x
adding x
$ echo xx >> x
$ hg commit -m xx
然后我更新到第一个提交(文件包含x
)并将其更改为y
:
$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo y > x
更新回第二次提交会触发合并,合并成功:
$ hg up
merging x
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
$ hg resolve --list
R x
$ cat x
y
xx
在我取回我的文件之前,我需要将它标记为未解决。然后我可以使用该internal:local
工具解决它:
$ hg resolve --unmark x
$ hg resolve --tool internal:local x
$ cat x
y
合并状态存储在.hg/merge
. 在那里你会发现一堆 SHA-1 哈希的文件名。我建议在开始使用上述命令之前制作此目录的副本,因为 Mercurial 认为不再需要该目录时会删除该目录。