Mercurial:撤消未提交更改的自动 merge

标签 mercurial merge

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

updating to branch default
25 files updated, 0 files merged, 0 files removed, 0 files unresolved



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

因此,我的问题是,是否有办法撤消 merge 并取回本地文件(带有未提交的更改),就像我调用 hg update 之前一样。 ?

(我发现 this post ,其中一位评论者建议 hg resolve --tool internal:local ,但在我的情况下似乎没有任何作用。)

谢谢。

最佳答案

正如您发现的那样,当您更新时,Mercurial 会将工作副本中的更改 merge 到目标修订版中。

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

$ hg resolve --list

它将显示一堆带有 R 的文件为解决。未解析的文件以 U 列出.之前 hg resolve将处理文件,您必须先将其标记为未解析:
$ hg resolve --unmark your-file

这是一个完整的 session ,我在其中创建了两个提交的提交:
$ 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

更新回第二次提交会触发 merge , merge 成功:
$ 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

merge 状态存储在 .hg/merge .在那里你会发现一堆 SHA-1 哈希的文件名。我建议您在开始使用上述命令之前制作该目录的副本,因为 Mercurial 会在它认为不再需要该目录时删除该目录。

关于Mercurial:撤消未提交更改的自动 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963134/

相关文章:

mercurial - Mercurial 中的追溯命名分支

python - pandas:列格式问题导致合并问题

oracle - ORA-01461 (with > 4k varchar2) 错误 仅在合并语句中。插入或更新工作正常

Mercurial HG : "hg push" returns abort: HTTP Error 500: No such file or directory

Mercurial - 确定是否需要从远程仓库进行 merge

python - 使用 hg archive 与wheel 生成可安装的python 模块

python - pandas 根据相同日期合并行

xml - 我们可以将 XML 文件导入另一个 XML 文件吗?

python - 在python中连接数据框时如何分配新的描述性列

mercurial - 在推送到 hgweb 服务器时创建远程书签