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 .
精彩评论