5

我做了hg pull并且hg update在一个我有未提交更改的文件夹上。它为几个文件打开了三向比较/合并工具,但我将它们全部关闭,因为我不记得这些更改是比 repo 中的更旧还是更新 - 我认为这会使文件冲突,就像在 SVN 中所做的那样 .. 但不,所有文件都已合并:

更新到分支默认
25 个文件已更新,0 个文件已合并,0 个文件已删除,0 个文件未解决

不幸的是,合并以一种不起作用的方式混合了两个版本。

因此,我的问题是,是否有一种方法可以撤消合并并取回本地文件(带有未提交的更改),就像我打电话之前一样hg update

(我发现了这篇文章,一位评论者建议hg resolve --tool internal:local,但在我的情况下它似乎没有做任何事情。)

谢谢。

4

1 回答 1

7

正如您所发现的那样,Mercurial 会在您更新时将工作副本中的更改合并到目标修订中。

如果合并是干净的(从 Mercurial 的角度来看),受影响的文件将被标记为“已解决”。你可以检查这个

$ hg resolve --list

它将显示一堆带有Rfor 已解决的文件。未解析的文件以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 认为不再需要该目录时会删除该目录。

于 2013-11-14T08:01:56.883 回答