【发布时间】:2010-12-27 12:12:51
【问题描述】:
我正在努力养成进行代码审查的习惯,但合并一直使这个过程变得困难,因为我不知道如何要求 Mercurial“只显示合并引入的更改,而这两个更改都不存在它的父母。”
或者,稍微正式一点(感谢 Steve Losh):
显示合并中不存在于其父节点中的每个块,并显示存在于其父节点中但也不存在于 3 中的每个块。
例如,假设我有一个包含两个文件 a 和 b 的存储库。如果“a”在修订版 1 中更改,“b”在修订版 2 中更改(位于单独的分支上)并且这两个更改在修订版 3 中合并,我将获得如下所示的历史记录:
@变更集:3
|\ 摘要:已合并。
| |
| o 变更集:2
| |摘要:改变b
| |
○ |变更集:1
|/ 摘要:改变一个
|
o 变更集:0
摘要:添加a和b
但如果我要求查看修订版 3 hg di -c 3 中引入的更改,Mercurial 会向我显示与我要求查看修订版 1 hg di -c 1 中引入的更改相同的内容:
$ hg di -c 3
--- 一个/一个
+++ b/a
@@ -1,1 +1,1 @@
-一种
+更改为
$ hg di -c 1
--- 一个/一个
+++ b/a
@@ -1,1 +1,1 @@
-一种
+更改为
但是,显然,这不是很有帮助 - 相反,我想被告知修订版 3 没有引入新的更改(或者,如果在合并过程中发生冲突,我只想看到解决该冲突)。比如:
$ hg di -c 3
$
那么,我该怎么做呢?
ps:我知道我可以使用rebase 减少我的存储库中的合并次数……但这不是我的问题 - 我的问题是弄清楚合并后发生了什么变化。 p>
【问题讨论】:
-
这听起来像是一个非常有用的命令。我期待着答案。
-
我确实写了一个合并的插件:mercurial.selenic.com/wiki/MergediffExtension
-
缺乏此功能似乎一直是引入木马的潜在途径。希望它将被纳入 hg 核心。
-
在 git 中你可以运行 git show
。在这里写得很好:haacked.com/archive/2014/02/21/reviewing-merge-commits 很想看看如何在 hg 中做到这一点。