Mercurial - 查看需要手动合并的文件列表?

Mar*_*eon 22 mercurial

是否有Mercurial命令可以在hg pull查看所有需要手动合并的文件列表(即:有冲突)时使用hg merge

Jam*_*ers 36

hg resolve --list

文档:

具有未解决冲突的合并通常是使用internal:merge配置设置或diff3等命令行合并工具进行非交互式合并的结果.resolve命令用于管理合并中的文件,运行hg merge之后,以及运行hg commit之前(即工作目录必须有两个父项).

编辑2012年1月5日:

(今天我收到了对这个答案的投票,所以我重温了它.我发现我误解了这个问题.)

问题是"我已经从远程存储库执行了一次拉取,但还没有执行合并.我可以看到在执行合并时会产生什么冲突?"

我上面的回答显然是错误的.阅读完链接文档后,我认为没有内置的方法可以做到这一点.但是,有一种方法可以在不破坏您的工作源树的情况下执行此操作.

假设您已将存储库A从某个远程源克隆到本地系统上的存储库B,即hg clone http://hg.example.com/A B.执行此操作后,您将对本地存储库B进行更改,该存储库至少涉及一次提交.与此同时,已对存储库A进行了更改,因此当您执行拉动时,您会收到一条消息,指示已添加新的更改集并已创建头.

此时,您可以hg heads列出合并中涉及的两个更改集.根据此信息,您可以发出状态命令以列出磁头之间的差异.假设您的存储库B中的修订号,根据头列表,是"1"和"2",那么您可以hg status --rev 1:2查看更改列表.

当然,这并不能告诉您进行合并时是否会发生冲突.由于没有可以向您显示此命令的命令,因此您必须通过克隆到新存储库并在那里进行合并来"预览"合并.所以,hg clone B C && cd C && hg merge.如果您对此合并的结果感到满意,您可以这样做hg com -m 'Merging complete' && hg push && cd ../ && rm -rf C.

这是一个过程,但如果合并结果是一场灾难,它会使您当前的源代码树保持清洁.您可能还会发现使用公共存储库的这种描述很有帮助.

  • 我以同样的方式误读了这个问题,所以你的回答仍适合我. (4认同)

Jos*_*erg 5

除非我自己误读,否则上面的答案似乎没有解决我认为被问到的问题:我在我的存储库中有两个分支,我想要合并,我想知道会发生什么样的冲突(例如,在逐步解决冲突解决方案之前.)

为此,我将与该:merge3工具合并(它尝试自动合并,但保留未解决的冲突),然后使用hg resolve --list- 或只是查看merge命令的输出 - 来查看冲突.

hg merge <otherbranch> --tool :merge3
hg resolve -l
Run Code Online (Sandbox Code Playgroud)

如果你实际上并不想在最后进行合并(如果你只想查看会发生什么冲突),那么可以在hg update -C之后运行以撤消合并.

如果您确实想要完成合并,则可以在合并更改集之前运行hg resolve <filepath>每个文件,或者只是hg resolve --all逐步查看所有仍存在冲突的文件hg commit.