如何在mercurial中显示特定于diff命名分支的diff

Dav*_*eau 26 mercurial

假设我有一个名为branch foo的两个提交a,b:

      a       b       c  
------o-------o-------o------- # default
       \          d         e
        ----------o---------o  # branch foo
Run Code Online (Sandbox Code Playgroud)

我想看到a和e之间的差异(不包括在内).我当然可以使用修订版ID,但这不太实用.在git中,可以做git diff master..foo.我怎样才能在hg中做同样的事情?

Ry4*_*ase 33

你可以使用revsets来做到这一点.

在您的具体示例中,我认为您可以获得正常de使用的列表:

hg log -r "branch('foo') - branch('default')"
Run Code Online (Sandbox Code Playgroud)

其中-定义为:

"x - y"
      Changesets in x but not in y.
Run Code Online (Sandbox Code Playgroud)

从a到e的差异可以通过以下方式完成:

hg diff -r "ancestor(default, foo)" -r foo
Run Code Online (Sandbox Code Playgroud)

虽然有可能是我没看到的简写.

  • 正确的语法似乎是:`hg log -r"branch('foo') - branch(默认)"` (2认同)

Ric*_*ard 12

另一种方法是,对于已经合并为默认值的分支也很有用:

hg diff -r "max(ancestors(foo) and branch(default)):foo"
Run Code Online (Sandbox Code Playgroud)

虽然这可能是一个痛苦的坑,所以我建议通过添加以下内容来设置别名:

[alias]
branchdiff = diff -r "max(ancestors('$1') and branch(default)):'$1'"
Run Code Online (Sandbox Code Playgroud)

到你的Mercurial.INI/hgrc,你可以像这样使用:

hg branchdiff <branch name>
Run Code Online (Sandbox Code Playgroud)

要么

hg branchdiff .
Run Code Online (Sandbox Code Playgroud)