revisions

Revision range summary

<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