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

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


SYNOPSIS
--------
[verse]
'git rev-list' [<options>] <commit>... [[--] <path>...]

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

:git-rev-list: 1
include::rev-list-description.txt[]

'rev-list' is a very essential Git command, 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 'git bisect' and
'git repack'.

OPTIONS
-------

:git-rev-list: 1
include::rev-list-options.txt[]

include::pretty-formats.txt[]

EXAMPLES
--------

* Print the list of commits reachable from the current branch.
+
----------
git rev-list HEAD
----------

* Print the list of commits on this branch, but not present in the
  upstream branch.
+
----------
git rev-list @{upstream}..HEAD
----------

* Format commits with their author and commit message (see also the
  porcelain linkgit:git-log[1]).
+
----------
git rev-list --format=medium HEAD
----------

* Format commits along with their diffs (see also the porcelain
  linkgit:git-log[1], which can do this in a single process).
+
----------
git rev-list HEAD |
git diff-tree --stdin --format=medium -p
----------

* Print the list of commits on the current branch that touched any
  file in the `Documentation` directory.
+
----------
git rev-list HEAD -- Documentation/
----------

* Print the list of commits authored by you in the past year, on
  any branch, tag, or other ref.
+
----------
git rev-list --author=you@example.com --since=1.year.ago --all
----------

* Print the list of objects reachable from the current branch (i.e., all
  commits and the blobs and trees they contain).
+
----------
git rev-list --objects HEAD
----------

* Compare the disk size of all reachable objects, versus those
  reachable from reflogs, versus the total packed size. This can tell
  you whether running `git repack -ad` might reduce the repository size
  (by dropping unreachable objects), and whether expiring reflogs might
  help.
+
----------
# reachable objects
git rev-list --disk-usage --objects --all
# plus reflogs
git rev-list --disk-usage --objects --all --reflog
# total disk size used
du -c .git/objects/pack/*.pack .git/objects/??/*
# alternative to du: add up "size" and "size-pack" fields
git count-objects -v
----------

* Report the disk size of each branch, not including objects used by the
  current branch. This can find outliers that are contributing to a
  bloated repository size (e.g., because somebody accidentally committed
  large build artifacts).
+
----------
git for-each-ref --format='%(refname)' |
while read branch
do
	size=$(git rev-list --disk-usage --objects HEAD..$branch)
	echo "$size $branch"
done |
sort -n
----------

* Compare the on-disk size of branches in one group of refs, excluding
  another. If you co-mingle objects from multiple remotes in a single
  repository, this can show which remotes are contributing to the
  repository size (taking the size of `origin` as a baseline).
+
----------
git rev-list --disk-usage --objects --remotes=$suspect --not --remotes=origin
----------

GIT
---
Part of the linkgit:git[1] suite
