在执行hg pull
时,您是否可以在hg merge
之后使用Mercurial命令查看需要手动合并的所有文件的列表(即:有冲突)? / p>
答案 0 :(得分:35)
hg resolve --list
未解决冲突的合并通常是使用internal:merge配置设置或diff3等命令行合并工具进行非交互式合并的结果。 resolve命令用于管理合并中的文件,运行hg merge之后,以及运行hg commit之前(即工作目录必须有两个父级)。
编辑2012年1月5日:
(今天我收到了对这个答案的投票,所以我重新审视了它。我发现我误解了这个问题。)
问题是“我已经从远程存储库执行了拉动,还没有执行合并。我可以看到在执行合并时会产生什么冲突吗?”
我上面的答案显然是错误的。阅读完链接文档后,我认为没有内置的方法可以做到这一点。但是,有一种方法可以在不破坏您的工作源树的情况下完成它。
假设您已从本地系统的某个远程源克隆到 B 的存储库 A ,即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
。
这是一个过程,但如果合并结果是一场灾难,它会使您当前的源树保持清洁。您可能还会发现this description使用公共存储库很有帮助。
答案 1 :(得分:5)
除非我自己误读,否则上面的答案似乎并没有解决我认为被问到的问题:我在我的存储库中有两个分支,我想要合并,我想知道会发生什么样的冲突(例如,在逐步解决冲突决议之前。)
为此,我将与:merge3
工具合并(尝试自动合并,但保留未解决的冲突),然后使用hg resolve --list
- 或者只看一下merge命令的输出 - 来看看冲突。
hg merge <otherbranch> --tool :merge3
hg resolve -l
如果你最终没想要合并(如果你只想查看会发生什么冲突),那么之后可以运行hg update -C
来撤消合并。
如果您确实想要完成合并,则可以在hg resolve <filepath>
合并变更集之前为每个文件运行hg resolve --all
,或者仅hg commit
逐步执行所有仍存在冲突的文件
答案 2 :(得分:1)
您可以使用 hg stat 的 - rev 选项和一对修订版来查看两者之间存在哪些文件差异。请参阅下面的略微详细但详细的示例:
首先,我们首先建立一个新的存储库:
[gkeramidas /tmp]$ hg init foo
[gkeramidas /tmp]$ cd foo
然后将名为foo.txt
的单个文件添加到新存储库:
[gkeramidas /tmp/foo]$ echo foo > foo.txt
[gkeramidas /tmp/foo]$ hg commit -Am 'add foo'
adding foo.txt
[gkeramidas /tmp/foo]$ hg glog
@ 0[tip] b7ac7bd864b7 2011-01-30 18:11 -0800 gkeramidas
add foo
现在添加第二个文件,名为bar.txt
作为修订版1:
[gkeramidas /tmp/foo]$ echo bar > bar.txt
[gkeramidas /tmp/foo]$ hg commit -Am 'add bar'
adding bar.txt
返回修订版0,并在另一个头上添加第三个文件。这样做是为了模拟其初始版本克隆了相同存储库的其他人的 pull :
[gkeramidas /tmp/foo]$ hg up -C 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
[gkeramidas /tmp/foo]$ echo koko > koko.txt
[gkeramidas /tmp/foo]$ hg commit -Am 'add koko'
adding koko.txt
created new head
[gkeramidas /tmp/foo]$ hg glog
@ 2[tip]:0 e5d80abdcb06 2011-01-30 18:12 -0800 gkeramidas
| add koko
|
| o 1 a2d0d0e66ce4 2011-01-30 18:12 -0800 gkeramidas
|/ add bar
|
o 0 b7ac7bd864b7 2011-01-30 18:11 -0800 gkeramidas
add foo
现在,您可以使用 hg stat 查看任何修订对之间存在哪些文件差异,例如:从rev 0到rev 1的更改将“bar.txt”添加到文件列表中:
[gkeramidas /tmp/foo]$ hg stat --rev 0:1
A bar.txt
从rev 0到rev2的更改将'koko.txt'添加到文件列表中:
[gkeramidas /tmp/foo]$ hg stat --rev 0:2
A koko.txt
但更有趣的是,从rev 1到rev 2的更改涉及两个文件清单更改。 (1)'koko.txt'在rev 2中添加,(2)'bar.txt'存在于rev 1中,但在rev 2中缺失,因此它显示为“已删除”文件:
[gkeramidas /tmp/foo]$ hg stat --rev 1:2
A koko.txt
R bar.txt
答案 3 :(得分:-1)
我认为hg status
正是您所寻找的。 p>
您可能希望从Mercurial:The Definitive Guide
中阅读本章