blob: ecf560fe5e62c2b268cc37c116114356baf55e66 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 7.0.2" />
<style type="text/css">
/* Debug borders */
p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
/*
border: 1px solid red;
*/
}
body {
margin: 1em 5% 1em 5%;
}
a { color: blue; }
a:visited { color: fuchsia; }
em {
font-style: italic;
}
strong {
font-weight: bold;
}
tt {
color: navy;
}
h1, h2, h3, h4, h5, h6 {
color: #527bbd;
font-family: sans-serif;
margin-top: 1.2em;
margin-bottom: 0.5em;
line-height: 1.3;
}
h1 {
border-bottom: 2px solid silver;
}
h2 {
border-bottom: 2px solid silver;
padding-top: 0.5em;
}
div.sectionbody {
font-family: serif;
margin-left: 0;
}
hr {
border: 1px solid silver;
}
p {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
pre {
padding: 0;
margin: 0;
}
span#author {
color: #527bbd;
font-family: sans-serif;
font-weight: bold;
font-size: 1.2em;
}
span#email {
}
span#revision {
font-family: sans-serif;
}
div#footer {
font-family: sans-serif;
font-size: small;
border-top: 2px solid silver;
padding-top: 0.5em;
margin-top: 4.0em;
}
div#footer-text {
float: left;
padding-bottom: 0.5em;
}
div#footer-badges {
float: right;
padding-bottom: 0.5em;
}
div#preamble,
div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
margin-right: 10%;
margin-top: 1.5em;
margin-bottom: 1.5em;
}
div.admonitionblock {
margin-top: 2.5em;
margin-bottom: 2.5em;
}
div.content { /* Block element content. */
padding: 0;
}
/* Block element titles. */
div.title, caption.title {
font-family: sans-serif;
font-weight: bold;
text-align: left;
margin-top: 1.0em;
margin-bottom: 0.5em;
}
div.title + * {
margin-top: 0;
}
td div.title:first-child {
margin-top: 0.0em;
}
div.content div.title:first-child {
margin-top: 0.0em;
}
div.content + div.title {
margin-top: 0.0em;
}
div.sidebarblock > div.content {
background: #ffffee;
border: 1px solid silver;
padding: 0.5em;
}
div.listingblock > div.content {
border: 1px solid silver;
background: #f4f4f4;
padding: 0.5em;
}
div.quoteblock > div.content {
padding-left: 2.0em;
}
div.quoteblock .attribution {
text-align: right;
}
div.admonitionblock .icon {
vertical-align: top;
font-size: 1.1em;
font-weight: bold;
text-decoration: underline;
color: #527bbd;
padding-right: 0.5em;
}
div.admonitionblock td.content {
padding-left: 0.5em;
border-left: 2px solid silver;
}
div.exampleblock > div.content {
border-left: 2px solid silver;
padding: 0.5em;
}
div.verseblock div.content {
white-space: pre;
}
div.imageblock div.content { padding-left: 0; }
div.imageblock img { border: 1px solid silver; }
span.image img { border-style: none; }
dl {
margin-top: 0.8em;
margin-bottom: 0.8em;
}
dt {
margin-top: 0.5em;
margin-bottom: 0;
font-style: italic;
}
dd > *:first-child {
margin-top: 0;
}
ul, ol {
list-style-position: outside;
}
ol.olist2 {
list-style-type: lower-alpha;
}
div.tableblock > table {
border-color: #527bbd;
border-width: 3px;
}
thead {
font-family: sans-serif;
font-weight: bold;
}
tfoot {
font-weight: bold;
}
div.hlist {
margin-top: 0.8em;
margin-bottom: 0.8em;
}
td.hlist1 {
vertical-align: top;
font-style: italic;
padding-right: 0.8em;
}
td.hlist2 {
vertical-align: top;
}
@media print {
div#footer-badges { display: none; }
}
include::./stylesheets/xhtml11-manpage.css[]
/* Workarounds for IE6's broken and incomplete CSS2. */
div.sidebar-content {
background: #ffffee;
border: 1px solid silver;
padding: 0.5em;
}
div.sidebar-title, div.image-title {
font-family: sans-serif;
font-weight: bold;
margin-top: 0.0em;
margin-bottom: 0.5em;
}
div.listingblock div.content {
border: 1px solid silver;
background: #f4f4f4;
padding: 0.5em;
}
div.quoteblock-content {
padding-left: 2.0em;
}
div.exampleblock-content {
border-left: 2px solid silver;
padding-left: 0.5em;
}
</style>
<title>git-rev-list(1)</title>
</head>
<body>
<div id="header">
<h1>
git-rev-list(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>git-rev-list -
Lists commit objects in reverse chronological order
</p>
</div>
</div>
<h2>SYNOPSIS</h2>
<div class="sectionbody">
<div class="verseblock">
<div class="content"><em>git-rev-list</em> [ --max-count=number ]
[ --skip=number ]
[ --max-age=timestamp ]
[ --min-age=timestamp ]
[ --sparse ]
[ --no-merges ]
[ --remove-empty ]
[ --not ]
[ --all ]
[ --stdin ]
[ --topo-order ]
[ --parents ]
[ --encoding[=&lt;encoding&gt;] ]
[ --(author|committer|grep)=&lt;pattern&gt; ]
[ [--objects | --objects-edge] [ --unpacked ] ]
[ --pretty | --header ]
[ --bisect ]
[ --merge ]
&lt;commit&gt;&#8230; [ -- &lt;paths&gt;&#8230; ]</div></div>
</div>
<h2>DESCRIPTION</h2>
<div class="sectionbody">
<p>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.</p>
<p>Commits which are stated with a preceding <em>^</em> cause listing to
stop at that point. Their parents are implied. Thus the following
command:</p>
<div class="listingblock">
<div class="content">
<pre><tt> $ git-rev-list foo bar ^baz</tt></pre>
</div></div>
<p>means "list all the commits which are included in <em>foo</em> and <em>bar</em>, but
not in <em>baz</em>".</p>
<p>A special notation "<em>&lt;commit1&gt;</em>..<em>&lt;commit2&gt;</em>" can be used as a
short-hand for "^<em>&lt;commit1&gt;</em> <em>&lt;commit2&gt;</em>". For example, either of
the following may be used interchangeably:</p>
<div class="listingblock">
<div class="content">
<pre><tt> $ git-rev-list origin..HEAD
$ git-rev-list HEAD ^origin</tt></pre>
</div></div>
<p>Another special notation is "<em>&lt;commit1&gt;</em>&#8230;<em>&lt;commit2&gt;</em>" which is useful
for merges. The resulting set of commits is the symmetric difference
between the two operands. The following two commands are equivalent:</p>
<div class="listingblock">
<div class="content">
<pre><tt> $ git-rev-list A B --not $(git-merge-base --all A B)
$ git-rev-list A...B</tt></pre>
</div></div>
<p><a href="git-rev-list.html">git-rev-list(1)</a> 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 <a href="git-bisect.html">git-bisect(1)</a> and
<a href="git-repack.html">git-repack(1)</a>.</p>
</div>
<h2>OPTIONS</h2>
<div class="sectionbody">
<h3>Commit Formatting</h3>
<p>Using these options, <a href="git-rev-list.html">git-rev-list(1)</a> will act similar to the
more specialized family of commit log tools: <a href="git-log.html">git-log(1)</a>,
<a href="git-show.html">git-show(1)</a>, and <a href="git-whatchanged.html">git-whatchanged(1)</a></p>
<dl>
<dt>
--pretty[=<em>&lt;format&gt;</em>]
</dt>
<dd>
<p>
Pretty-prints the details of a commit. <tt>--pretty</tt>
without an explicit <tt>=&lt;format&gt;</tt> defaults to <em>medium</em>.
If the commit is a merge, and if the pretty-format
is not <em>oneline</em>, <em>email</em> or <em>raw</em>, an additional line is
inserted before the <em>Author:</em> line. This line begins with
"Merge: " and the sha1s of ancestral commits are printed,
separated by spaces. Note that the listed commits may not
necessarily be the list of the <strong>direct</strong> parent commits if you
have limited your view of history: for example, if you are
only interested in changes related to a certain directory or
file. Here are some additional details for each format:
</p>
<ul>
<li>
<p>
<em>oneline</em>
</p>
<div class="literalblock">
<div class="content">
<pre><tt>&lt;sha1&gt; &lt;title line&gt;</tt></pre>
</div></div>
<p>This is designed to be as compact as possible.</p>
</li>
<li>
<p>
<em>short</em>
</p>
<div class="literalblock">
<div class="content">
<pre><tt>commit &lt;sha1&gt;
Author: &lt;author&gt;</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>&lt;title line&gt;</tt></pre>
</div></div>
</li>
<li>
<p>
<em>medium</em>
</p>
<div class="literalblock">
<div class="content">
<pre><tt>commit &lt;sha1&gt;
Author: &lt;author&gt;
Date: &lt;date&gt;</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>&lt;title line&gt;</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>&lt;full commit message&gt;</tt></pre>
</div></div>
</li>
<li>
<p>
<em>full</em>
</p>
<div class="literalblock">
<div class="content">
<pre><tt>commit &lt;sha1&gt;
Author: &lt;author&gt;
Commit: &lt;committer&gt;</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>&lt;title line&gt;</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>&lt;full commit message&gt;</tt></pre>
</div></div>
</li>
<li>
<p>
<em>fuller</em>
</p>
<div class="literalblock">
<div class="content">
<pre><tt>commit &lt;sha1&gt;
Author: &lt;author&gt;
AuthorDate: &lt;date &amp; time&gt;
Commit: &lt;committer&gt;
CommitDate: &lt;date &amp; time&gt;</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>&lt;title line&gt;</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>&lt;full commit message&gt;</tt></pre>
</div></div>
</li>
<li>
<p>
<em>email</em>
</p>
<div class="literalblock">
<div class="content">
<pre><tt>From &lt;sha1&gt; &lt;date&gt;
From: &lt;author&gt;
Date: &lt;date &amp; time&gt;
Subject: [PATCH] &lt;title line&gt;</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>full commit message&gt;</tt></pre>
</div></div>
</li>
<li>
<p>
<em>raw</em>
</p>
<p>The <em>raw</em> format shows the entire commit exactly as
stored in the commit object. Notably, the SHA1s are
displayed in full, regardless of whether --abbrev or
--no-abbrev are used, and <em>parents</em> information show the
true parent commits, without taking grafts nor history
simplification into account.</p>
</li>
</ul>
</dd>
<dt>
--encoding[=&lt;encoding&gt;]
</dt>
<dd>
<p>
The commit objects record the encoding used for the log message
in their encoding header; this option can be used to tell the
command to re-code the commit log message in the encoding
preferred by the user. For non plumbing commands this
defaults to UTF-8.
</p>
</dd>
<dt>
--relative-date
</dt>
<dd>
<p>
Show dates relative to the current time, e.g. "2 hours ago".
Only takes effect for dates shown in human-readable format, such
as when using "--pretty".
</p>
</dd>
<dt>
--header
</dt>
<dd>
<p>
Print the contents of the commit in raw-format; each record is
separated with a NUL character.
</p>
</dd>
<dt>
--parents
</dt>
<dd>
<p>
Print the parents of the commit.
</p>
</dd>
</dl>
<h3>Diff Formatting</h3>
<p>Below are listed options that control the formatting of diff output.
Some of them are specific to <a href="git-rev-list.html">git-rev-list(1)</a>, however other diff
options may be given. See <a href="git-diff-files.html">git-diff-files(1)</a> for more options.</p>
<dl>
<dt>
-c
</dt>
<dd>
<p>
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.
</p>
</dd>
<dt>
--cc
</dt>
<dd>
<p>
This flag implies the <em>-c</em> 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.
</p>
</dd>
<dt>
-r
</dt>
<dd>
<p>
Show recursive diffs.
</p>
</dd>
<dt>
-t
</dt>
<dd>
<p>
Show the tree objects in the diff output. This implies <em>-r</em>.
</p>
</dd>
</dl>
<h3>Commit Limiting</h3>
<p>Besides specifying a range of commits that should be listed using the
special notations explained in the description, additional commit
limiting may be applied.</p>
<dl>
<dt>
-n <em>number</em>, --max-count=<em>number</em>
</dt>
<dd>
<p>
Limit the number of commits output.
</p>
</dd>
<dt>
--skip=<em>number</em>
</dt>
<dd>
<p>
Skip <em>number</em> commits before starting to show the commit output.
</p>
</dd>
<dt>
--since=<em>date</em>, --after=<em>date</em>
</dt>
<dd>
<p>
Show commits more recent than a specific date.
</p>
</dd>
<dt>
--until=<em>date</em>, --before=<em>date</em>
</dt>
<dd>
<p>
Show commits older than a specific date.
</p>
</dd>
<dt>
--max-age=<em>timestamp</em>, --min-age=<em>timestamp</em>
</dt>
<dd>
<p>
Limit the commits output to specified time range.
</p>
</dd>
<dt>
--author=<em>pattern</em>, --committer=<em>pattern</em>
</dt>
<dd>
<p>
Limit the commits output to ones with author/committer
header lines that match the specified pattern.
</p>
</dd>
<dt>
--grep=<em>pattern</em>
</dt>
<dd>
<p>
Limit the commits output to ones with log message that
matches the specified pattern.
</p>
</dd>
<dt>
--remove-empty
</dt>
<dd>
<p>
Stop when a given path disappears from the tree.
</p>
</dd>
<dt>
--no-merges
</dt>
<dd>
<p>
Do not print commits with more than one parent.
</p>
</dd>
<dt>
--not
</dt>
<dd>
<p>
Reverses the meaning of the <em>^</em> prefix (or lack thereof)
for all following revision specifiers, up to the next <em>--not</em>.
</p>
</dd>
<dt>
--all
</dt>
<dd>
<p>
Pretend as if all the refs in <tt>$GIT_DIR/refs/</tt> are listed on the
command line as <em>&lt;commit&gt;</em>.
</p>
</dd>
<dt>
--stdin
</dt>
<dd>
<p>
In addition to the <em>&lt;commit&gt;</em> listed on the command
line, read them from the standard input.
</p>
</dd>
<dt>
--merge
</dt>
<dd>
<p>
After a failed merge, show refs that touch files having a
conflict and don't exist on all heads to merge.
</p>
</dd>
<dt>
--boundary
</dt>
<dd>
<p>
Output uninteresting commits at the boundary, which are usually
not shown.
</p>
</dd>
<dt>
--dense, --sparse
</dt>
<dd>
<p>
When optional paths are given, the default behaviour (<em>--dense</em>) is to
only output commits that changes at least one of them, and also ignore
merges that do not touch the given paths.
</p>
<p>Use the <em>--sparse</em> flag to makes the command output all eligible commits
(still subject to count and age limitation), but apply merge
simplification nevertheless.</p>
</dd>
<dt>
--bisect
</dt>
<dd>
<p>
Limit output to the one commit object which is roughly halfway between
the included and excluded commits. Thus, if
</p>
<div class="listingblock">
<div class="content">
<pre><tt> $ git-rev-list --bisect foo ^bar ^baz</tt></pre>
</div></div>
<p>outputs <em>midpoint</em>, the output of the two commands</p>
<div class="listingblock">
<div class="content">
<pre><tt> $ git-rev-list foo ^midpoint
$ git-rev-list midpoint ^bar ^baz</tt></pre>
</div></div>
<p>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.</p>
</dd>
</dl>
<h3>Commit Ordering</h3>
<p>By default, the commits are shown in reverse chronological order.</p>
<dl>
<dt>
--topo-order
</dt>
<dd>
<p>
This option makes them appear in topological order (i.e.
descendant commits are shown before their parents).
</p>
</dd>
<dt>
--date-order
</dt>
<dd>
<p>
This option is similar to <em>--topo-order</em> in the sense that no
parent comes before all of its children, but otherwise things
are still ordered in the commit timestamp order.
</p>
</dd>
</dl>
<h3>Object Traversal</h3>
<p>These options are mostly targeted for packing of git repositories.</p>
<dl>
<dt>
--objects
</dt>
<dd>
<p>
Print the object IDs of any object referenced by the listed
commits. <em>git-rev-list --objects foo ^bar</em> thus means "send me
all object IDs which I need to download if I have the commit
object <em>bar</em>, but not <em>foo</em>".
</p>
</dd>
<dt>
--objects-edge
</dt>
<dd>
<p>
Similar to <em>--objects</em>, but also print the IDs of excluded
commits prefixed with a "-" character. This is used by
<a href="git-pack-objects.html">git-pack-objects(1)</a> to build "thin" pack, which records
objects in deltified form based on objects contained in these
excluded commits to reduce network traffic.
</p>
</dd>
<dt>
--unpacked
</dt>
<dd>
<p>
Only useful with <em>--objects</em>; print the object IDs that are not
in packs.
</p>
</dd>
</dl>
</div>
<h2>Author</h2>
<div class="sectionbody">
<p>Written by Linus Torvalds &lt;torvalds@osdl.org&gt;</p>
</div>
<h2>Documentation</h2>
<div class="sectionbody">
<p>Documentation by David Greaves, Junio C Hamano, Jonas Fonseca
and the git-list &lt;git@vger.kernel.org&gt;.</p>
</div>
<h2>GIT</h2>
<div class="sectionbody">
<p>Part of the <a href="git.html">git(7)</a> suite</p>
</div>
<div id="footer">
<div id="footer-text">
Last updated 31-Dec-2006 01:19:04 UTC
</div>
</div>
</body>
</html>