Mercurial:撤消与未更改的更改的自动合并

Mic*_*aut 5 merge mercurial

我没有hg pullhg update在那里我有未提交更改的文件夹上.它为几个文件打开了三向比较/合并工具,但我关闭了它们,因为我不记得更改是比回购中的更新还是更新 - 我认为这会使文件冲突就像它在SVN中所做的那样..但不是,所有文件都合并了:

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

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

因此,我的问题是,是否有办法撤消合并并取回本地文件(带有未经修改的更改),就像我之前调用它们一样hg update

(我发现这篇帖子,一位评论者建议hg resolve --tool internal:local,但在我的案例中似乎没有做任何事情.)

谢谢.

Mar*_*ler 7

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

如果合并是干净的(从Mercurial的角度来看),受影响的文件将标记为"已解决".你可以用它来检查

$ hg resolve --list
Run Code Online (Sandbox Code Playgroud)

它会显示一堆带有Rfor 的文件.列出了未解析的文件U.在hg resolve处理文件之前,您必须先将其标记为未解析:

$ hg resolve --unmark your-file
Run Code Online (Sandbox Code Playgroud)

这是一个完整的会话,我用两个提交创建一个提交:

$ hg init
$ echo x > x
$ hg commit -A -m x
adding x
$ echo xx >> x
$ hg commit -m xx
Run Code Online (Sandbox Code Playgroud)

然后我更新到第一个提交(文件包含的位置x)并将其更改为y:

$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo y > x
Run Code Online (Sandbox Code Playgroud)

更新回第二个提交会触发合并,这会成功:

$ 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
Run Code Online (Sandbox Code Playgroud)

在我恢复文件之前,我需要将其标记为未解析.然后我可以使用该internal:local工具解决它:

$ hg resolve --unmark x
$ hg resolve --tool internal:local x
$ cat x
y
Run Code Online (Sandbox Code Playgroud)

合并状态存储在.hg/merge.你会在那里找到SHA-1哈希的一堆文件名.我建议在开始播放上述命令之前复制此目录,因为Mercurial会在认为不再需要时删除该目录.