Skip to content

Commit

Permalink
rev-parse documentation: talk about range notation.
Browse files Browse the repository at this point in the history
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Jul 7, 2006
1 parent 8048e24 commit be4c701
Showing 1 changed file with 37 additions and 8 deletions.
45 changes: 37 additions & 8 deletions Documentation/git-rev-parse.txt
Original file line number Diff line number Diff line change
Expand Up @@ -156,21 +156,16 @@ syntax.
and dereference the tag recursively until a non-tag object is
found.

'git-rev-parse' also accepts a prefix '{caret}' to revision parameter,
which is passed to 'git-rev-list'. Two revision parameters
concatenated with '..' is a short-hand for writing a range
between them. I.e. 'r1..r2' is equivalent to saying '{caret}r1 r2'

Here is an illustration, by Jon Loeliger. Both node B and C are
a commit parents of commit node A. Parent commits are ordered
left-to-right.

G H I J
\ / \ /
D E F
\ | /
\ | /
\|/
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
Expand All @@ -188,6 +183,40 @@ left-to-right.
J = F^2 = B^3^2 = A^^3^2


SPECIFYING RANGES
-----------------

History traversing commands such as `git-log` operate on a set
of commits, not just a single commit. To these commands,
specifying a single revision with the notation described in the
previous section means the set of commits reachable from that
commit, following the commit ancestry chain.

To exclude commits reachable from a commit, a prefix `{caret}`
notation is used. E.g. "`{caret}r1 r2`" means commits reachable
from `r2` but exclude the ones reachable from `r1`.

This set operation appears so often that there is a shorthand
for it. "`r1..r2`" is equivalent to "`{caret}r1 r2`". It is
the difference of two sets (subtract the set of commits
reachable from `r1` from the set of commits reachable from
`r2`).

A similar notation "`r1\...r2`" is called symmetric difference
of `r1` and `r2` and is defined as
"`r1 r2 --not $(git-merge-base --all r1 r2)`".
It it the set of commits that are reachable from either one of
`r1` or `r2` but not from both.

Here are a few examples:

D A B D
D F A B C D F
^A G B D
^A F B C F
G...I C D F G I
^B G I C D F G I

Author
------
Written by Linus Torvalds <torvalds@osdl.org> and
Expand Down

0 comments on commit be4c701

Please sign in to comment.