【问题标题】:Mercurial: how can I see only the changes introduced by a merge?Mercurial:我怎样才能只看到合并引入的更改?
【发布时间】: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 merge


【解决方案1】:

简短的回答:你不能用任何常用的 Mercurial 命令来做到这一点。

运行hg diff -c 3 将显示3 与其第一个父级之间的变化——即运行hg merge 时所处的变更集。

当您认为分支不仅仅是简单的变更集时,这是有道理的。当您运行 hg up 1 && hg merge 2 时,您是在告诉 Mercurial:“将变更集 2 合并到变更集 1 中”。

如果您使用命名分支,则更为明显。假设您的示例中的变更集2 位于名为rewrite-ui 的命名分支上。当您运行hg update 1 && hg merge rewrite-ui 时,您实际上是在说:“将rewrite-ui 分支中的所有更改合并到当前分支中。”当您稍后在此变更集上运行 hg diff -c 时,它会向您显示合并时引入到 default 分支(或 1 的任何分支)的所有内容,这是有道理的。

不过,从您的问题来看,您似乎正在寻找一种表达方式:

显示此变更集中不存在于其父级中的每个块,并显示存在于其父级中但不存在于3 中的每个块。

这不是一件容易计算的事情(我什至不确定我现在是否得到了描述)。不过,我绝对可以看到它的用处,因此,如果您可以明确定义它,您可能会说服我们其中一位阅读 SO 的 Mercurial 贡献者来实现它。

【讨论】:

  • Hrm,看来我之前忘了说显而易见的事情:感谢您的回答。无论如何,你有没有听过任何可能有兴趣搞砸东西的 HG 开发者?或者,您(或其他人?)会介意我在尝试弄清楚如何实现这一点时对它们进行窃听吗?
  • 我很感兴趣,因为如果我正在开发的 hg-review 扩展有一个理智的“合并差异”会非常好。我是 freenode 上#mercurial 的 sjl —— 来找我吧。
  • 抱歉回复晚了……但我确实写了这样一个插件:mercurial.selenic.com/wiki/MergediffExtension
【解决方案2】:

为了进行代码审查,您确实希望只查看您正在审查的项目中的更改。为此,我们为每个故事使用一个新分支,并使用拉取请求来突出更改,在创建拉取请求之前将所有更改合并到故事分支中。我们将代码托管在 bitbucket 上,审查/拉取请求工具非常好,提供并排差异。

Pull requests with side-by-side diffs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 2021-11-25
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多