开发者

How to show the diff specific to a named branch in mercurial

Assuming I have a named branch foo with two commits a, b:

      a       b       c  
------o-------o-------o------- # default
       \          d         e
        ----------o---------o  # branch foo

I want to see the diff between a and e (a not included). I could of course use the revision id, bu开发者_运维百科t that's not very practical. In git, one can just do git diff master..foo. How can I do the same in hg ?


You can do it using revsets.

In your specific example I think you could get a list of of just d and e using:

hg log -r "branch('foo') - branch('default')"

where that - is defined as:

"x - y"
      Changesets in x but not in y.

Getting the diff from a to e could be done as:

hg diff -r "ancestor(default, foo)" -r foo

though there's possibly a shorthand for that I'm not seeing.


Another way to do this, useful also for branches that you have already merged to default is:

hg diff -r "max(ancestors(foo) and branch(default)):foo"

Though that can be a pit of a pain, so i'd recommend setting up an alias by adding something like:

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

To your Mercurial.INI/hgrc which you can then use like this:

hg branchdiff <branch name>

or

hg branchdiff .


If you want logs from current branch only:

hg log -b .


diff between branches:

hg diff -r <branchname_1>:<branchname_2>

show current branch's latest commit:

hg log -r .

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜