<rev>
Include commits that are reachable from <rev> (i.e. <rev> and
its ancestors).
^<rev>
Exclude commits that are reachable from <rev> (i.e. <rev> and
its ancestors).
<rev1>..<rev2>
Include commits that are reachable from <rev2> but exclude
those that are reachable from <rev1>. When either <rev1> or
<rev2> is omitted, it defaults to HEAD
.
<rev1>...<rev2>
Include commits that are reachable from either <rev1> or
<rev2> but exclude those that are reachable from both. When
either <rev1> or <rev2> is omitted, it defaults to HEAD
.
<rev>^@, e.g. HEAD^@
A suffix ^ followed by an at sign is the same as listing all
parents of <rev> (meaning, include anything reachable from
its parents, but not the commit itself).
<rev>^!, e.g. HEAD^!
A suffix ^ followed by an exclamation mark is the same as
giving commit <rev> and then all its parents prefixed with ^
to exclude them (and their ancestors).
<rev>^-<n>, e.g. HEAD^-, HEAD^-2
Equivalent to <rev>^<n>..<rev>, with <n> = 1 if not given.
Here are a handful of examples using the Loeliger illustration
above, with each step in the notation's expansion and selection
carefully spelt out:
Args Expanded arguments Selected commits
D G H D
D F G H I J D F
^G D H D
^D B E I J F B
^D B C E I J F B C
C I J F C
B..C = ^B C C
B...C = B ^F C G H D E B C
B^- = B^..B
= ^B^1 B E I J F B
C^@ = C^1
= F I J F
B^@ = B^1 B^2 B^3
= D E F D G H E F I J
C^! = C ^C^@
= C ^C^1
= C ^F C
B^! = B ^B^@
= B ^B^1 ^B^2 ^B^3
= B ^D ^E ^F B
F^! D = F ^I ^J D G H D F