git-rev-list(1)
===============

NAME
----
git-rev-list - Lists commit objects in reverse chronological order


SYNOPSIS
--------
[verse]
'git-rev-list' [ \--max-count=number ]
	     [ \--skip=number ]
	     [ \--max-age=timestamp ]
	     [ \--min-age=timestamp ]
	     [ \--sparse ]
	     [ \--no-merges ]
	     [ \--remove-empty ]
	     [ \--not ]
	     [ \--all ]
	     [ \--stdin ]
	     [ \--topo-order ]
	     [ \--parents ]
	     [ \--left-right ]
	     [ \--cherry-pick ]
	     [ \--encoding[=<encoding>] ]
	     [ \--(author|committer|grep)=<pattern> ]
	     [ \--date={local|relative|default} ]
	     [ [\--objects | \--objects-edge] [ \--unpacked ] ]
	     [ \--pretty | \--header ]
	     [ \--bisect ]
	     [ \--bisect-vars ]
	     [ \--merge ]
	     [ \--reverse ]
	     [ \--walk-reflogs ]
	     <commit>... [ \-- <paths>... ]

DESCRIPTION
-----------

Lists commit objects in reverse chronological order starting at the
given commit(s), taking ancestry relationship into account.  This is
useful to produce human-readable log output.

Commits which are stated with a preceding '{caret}' cause listing to
stop at that point. Their parents are implied. Thus the following
command:

-----------------------------------------------------------------------
	$ git-rev-list foo bar ^baz
-----------------------------------------------------------------------

means "list all the commits which are included in 'foo' and 'bar', but
not in 'baz'".

A special notation "'<commit1>'..'<commit2>'" can be used as a
short-hand for "{caret}'<commit1>' '<commit2>'". For example, either of
the following may be used interchangeably:

-----------------------------------------------------------------------
	$ git-rev-list origin..HEAD
	$ git-rev-list HEAD ^origin
-----------------------------------------------------------------------

Another special notation is "'<commit1>'...'<commit2>'" which is useful
for merges.  The resulting set of commits is the symmetric difference
between the two operands.  The following two commands are equivalent:

-----------------------------------------------------------------------
	$ git-rev-list A B --not $(git-merge-base --all A B)
	$ git-rev-list A...B
-----------------------------------------------------------------------

gitlink:git-rev-list[1] is a very essential git program, since it
provides the ability to build and traverse commit ancestry graphs. For
this reason, it has a lot of different options that enables it to be
used by commands as different as gitlink:git-bisect[1] and
gitlink:git-repack[1].

OPTIONS
-------

Commit Formatting
~~~~~~~~~~~~~~~~~

Using these options, gitlink:git-rev-list[1] will act similar to the
more specialized family of commit log tools: gitlink:git-log[1],
gitlink:git-show[1], and gitlink:git-whatchanged[1]

include::pretty-formats.txt[]

--relative-date::

	Synonym for `--date=relative`.

--date={relative,local,default}::

	Only takes effect for dates shown in human-readable format, such
	as when using "--pretty".
+
`--date=relative` shows dates relative to the current time,
e.g. "2 hours ago".
+
`--date=local` shows timestamps in user's local timezone.
+
`--date=default` shows timestamps in the original timezone
(either committer's or author's).

--header::

	Print the contents of the commit in raw-format; each record is
	separated with a NUL character.

--parents::

	Print the parents of the commit.

--left-right::

	Mark which side of a symmetric diff a commit is reachable from.
	Commits from the left side are prefixed with `<` and those from
	the right with `>`.  If combined with `--boundary`, those
	commits are prefixed with `-`.
+
For example, if you have this topology:
+
-----------------------------------------------------------------------
             y---b---b  branch B
            / \ /
           /   .
          /   / \
         o---x---a---a  branch A
-----------------------------------------------------------------------
+
you would get an output line this:
+
-----------------------------------------------------------------------
	$ git rev-list --left-right --boundary --pretty=oneline A...B

	>bbbbbbb... 3rd on b
	>bbbbbbb... 2nd on b
	<aaaaaaa... 3rd on a
	<aaaaaaa... 2nd on a
	-yyyyyyy... 1st on b
	-xxxxxxx... 1st on a
-----------------------------------------------------------------------

Diff Formatting
~~~~~~~~~~~~~~~

Below are listed options that control the formatting of diff output.
Some of them are specific to gitlink:git-rev-list[1], however other diff
options may be given. See gitlink:git-diff-files[1] for more options.

-c::

	This flag changes the way a merge commit is displayed.  It shows
	the differences from each of the parents to the merge result
	simultaneously instead of showing pairwise diff between a parent
	and the result one at a time. Furthermore, it lists only files
	which were modified from all parents.

--cc::

	This flag implies the '-c' options and further compresses the
	patch output by omitting hunks that show differences from only
	one parent, or show the same change from all but one parent for
	an Octopus merge.

-r::

	Show recursive diffs.

-t::

	Show the tree objects in the diff output. This implies '-r'.

Commit Limiting
~~~~~~~~~~~~~~~

Besides specifying a range of commits that should be listed using the
special notations explained in the description, additional commit
limiting may be applied.

--

-n 'number', --max-count='number'::

	Limit the number of commits output.

--skip='number'::

	Skip 'number' commits before starting to show the commit output.

--since='date', --after='date'::

	Show commits more recent than a specific date.

--until='date', --before='date'::

	Show commits older than a specific date.

--max-age='timestamp', --min-age='timestamp'::

	Limit the commits output to specified time range.

--author='pattern', --committer='pattern'::

	Limit the commits output to ones with author/committer
	header lines that match the specified pattern.

--grep='pattern'::

	Limit the commits output to ones with log message that
	matches the specified pattern.

--remove-empty::

	Stop when a given path disappears from the tree.

--no-merges::

	Do not print commits with more than one parent.

--not::

	Reverses the meaning of the '{caret}' prefix (or lack thereof)
	for all following revision specifiers, up to the next '--not'.

--all::

	Pretend as if all the refs in `$GIT_DIR/refs/` are listed on the
	command line as '<commit>'.

--stdin::

	In addition to the '<commit>' listed on the command
	line, read them from the standard input.

--cherry-pick::

	Omit any commit that introduces the same change as
	another commit on the "other side" when the set of
	commits are limited with symmetric difference.
+
For example, if you have two branches, `A` and `B`, a usual way
to list all commits on only one side of them is with
`--left-right`, like the example above in the description of
that option.  It however shows the commits that were cherry-picked
from the other branch (for example, "3rd on b" may be cherry-picked
from branch A).  With this option, such pairs of commits are
excluded from the output.

-g, --walk-reflogs::

	Instead of walking the commit ancestry chain, walk
	reflog entries from the most recent one to older ones.
	When this option is used you cannot specify commits to
	exclude (that is, '{caret}commit', 'commit1..commit2',
	nor 'commit1...commit2' notations cannot be used).
+
With '\--pretty' format other than oneline (for obvious reasons),
this causes the output to have two extra lines of information
taken from the reflog.  By default, 'commit@{Nth}' notation is
used in the output.  When the starting commit is specified as
'commit@{now}', output also uses 'commit@{timestamp}' notation
instead.  Under '\--pretty=oneline', the commit message is
prefixed with this information on the same line.

--merge::

	After a failed merge, show refs that touch files having a
	conflict and don't exist on all heads to merge.

--boundary::

	Output uninteresting commits at the boundary, which are usually
	not shown.

--dense, --sparse::

When optional paths are given, the default behaviour ('--dense') is to
only output commits that changes at least one of them, and also ignore
merges that do not touch the given paths.

Use the '--sparse' flag to makes the command output all eligible commits
(still subject to count and age limitation), but apply merge
simplification nevertheless.

--bisect::

Limit output to the one commit object which is roughly halfway between
the included and excluded commits. Thus, if

-----------------------------------------------------------------------
	$ git-rev-list --bisect foo ^bar ^baz
-----------------------------------------------------------------------

outputs 'midpoint', the output of the two commands

-----------------------------------------------------------------------
	$ git-rev-list foo ^midpoint
	$ git-rev-list midpoint ^bar ^baz
-----------------------------------------------------------------------

would be of roughly the same length.  Finding the change which
introduces a regression is thus reduced to a binary search: repeatedly
generate and test new 'midpoint's until the commit chain is of length
one.

--bisect-vars::

This calculates the same as `--bisect`, but outputs text ready
to be eval'ed by the shell. These lines will assign the name of
the midpoint revision to the variable `bisect_rev`, and the
expected number of commits to be tested after `bisect_rev` is
tested to `bisect_nr`, the expected number of commits to be
tested if `bisect_rev` turns out to be good to `bisect_good`,
the expected number of commits to be tested if `bisect_rev`
turns out to be bad to `bisect_bad`, and the number of commits
we are bisecting right now to `bisect_all`.

--

Commit Ordering
~~~~~~~~~~~~~~~

By default, the commits are shown in reverse chronological order.

--topo-order::

	This option makes them appear in topological order (i.e.
	descendant commits are shown before their parents).

--date-order::

	This option is similar to '--topo-order' in the sense that no
	parent comes before all of its children, but otherwise things
	are still ordered in the commit timestamp order.

--reverse::

	Output the commits in reverse order.

Object Traversal
~~~~~~~~~~~~~~~~

These options are mostly targeted for packing of git repositories.

--objects::

	Print the object IDs of any object referenced by the listed
	commits.  'git-rev-list --objects foo ^bar' thus means "send me
	all object IDs which I need to download if I have the commit
	object 'bar', but not 'foo'".

--objects-edge::

	Similar to '--objects', but also print the IDs of excluded
	commits prefixed with a "-" character.  This is used by
	gitlink:git-pack-objects[1] to build "thin" pack, which records
	objects in deltified form based on objects contained in these
	excluded commits to reduce network traffic.

--unpacked::

	Only useful with '--objects'; print the object IDs that are not
	in packs.

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

Documentation
--------------
Documentation by David Greaves, Junio C Hamano, Jonas Fonseca
and the git-list <git@vger.kernel.org>.

GIT
---
Part of the gitlink:git[7] suite
