blob: 0430139093ddfc3bf9742eab279acc7afaa8951b [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-rev-list(1)
2===============
3
4NAME
5----
6git-rev-list - Lists commit objects in reverse chronological order
7
8
9SYNOPSIS
10--------
Junio C Hamano235a91e2006-01-07 01:13:5811[verse]
Junio C Hamano1a4e8412005-12-27 08:17:2312'git-rev-list' [ \--max-count=number ]
Junio C Hamano17bbaca2006-12-25 11:36:3113 [ \--skip=number ]
Junio C Hamano235a91e2006-01-07 01:13:5814 [ \--max-age=timestamp ]
15 [ \--min-age=timestamp ]
16 [ \--sparse ]
17 [ \--no-merges ]
Junio C Hamano9be18972006-01-28 08:54:5718 [ \--remove-empty ]
Junio C Hamanoee695f22007-06-21 00:35:3619 [ \--full-history ]
Junio C Hamano872c5682006-07-07 06:05:4020 [ \--not ]
Junio C Hamano235a91e2006-01-07 01:13:5821 [ \--all ]
Junio C Hamanoc9245d92006-09-06 09:35:4622 [ \--stdin ]
Junio C Hamanodecf50e2006-03-05 10:51:1423 [ \--topo-order ]
Junio C Hamano235a91e2006-01-07 01:13:5824 [ \--parents ]
Junio C Hamanoee695f22007-06-21 00:35:3625 [ \--timestamp ]
Junio C Hamano5678d692007-04-06 00:51:4326 [ \--left-right ]
Junio C Hamanod9e0e5d2007-04-14 16:22:0427 [ \--cherry-pick ]
Junio C Hamano775a0f42006-12-31 01:19:1428 [ \--encoding[=<encoding>] ]
Junio C Hamano47c1e3c2006-09-25 04:45:5529 [ \--(author|committer|grep)=<pattern> ]
Junio C Hamanode9879a2007-07-22 09:33:4230 [ \--regexp-ignore-case | \-i ]
31 [ \--extended-regexp | \-E ]
Junio C Hamano02f130b2007-07-14 08:26:5632 [ \--date={local|relative|default|iso|rfc|short} ]
Junio C Hamano5f327762006-03-02 09:14:5133 [ [\--objects | \--objects-edge] [ \--unpacked ] ]
Junio C Hamano235a91e2006-01-07 01:13:5834 [ \--pretty | \--header ]
35 [ \--bisect ]
Junio C Hamano20f64da2007-04-04 18:38:3036 [ \--bisect-vars ]
Junio C Hamano859f3b42006-08-04 10:04:3037 [ \--merge ]
Junio C Hamano053827f2007-02-14 07:23:5838 [ \--reverse ]
Junio C Hamanodb450ba2007-01-21 08:57:1439 [ \--walk-reflogs ]
Junio C Hamano235a91e2006-01-07 01:13:5840 <commit>... [ \-- <paths>... ]
Junio C Hamano1a4e8412005-12-27 08:17:2341
42DESCRIPTION
43-----------
Junio C Hamano89e135d2006-09-03 06:18:2544
Junio C Hamano1a4e8412005-12-27 08:17:2345Lists commit objects in reverse chronological order starting at the
46given commit(s), taking ancestry relationship into account. This is
47useful to produce human-readable log output.
48
Junio C Hamano89e135d2006-09-03 06:18:2549Commits which are stated with a preceding '{caret}' cause listing to
50stop at that point. Their parents are implied. Thus the following
51command:
52
53-----------------------------------------------------------------------
54$ git-rev-list foo bar ^baz
55-----------------------------------------------------------------------
56
Junio C Hamano1a4e8412005-12-27 08:17:2357means "list all the commits which are included in 'foo' and 'bar', but
58not in 'baz'".
59
Junio C Hamano89e135d2006-09-03 06:18:2560A special notation "'<commit1>'..'<commit2>'" can be used as a
61short-hand for "{caret}'<commit1>' '<commit2>'". For example, either of
62the following may be used interchangeably:
Junio C Hamano1a4e8412005-12-27 08:17:2363
Junio C Hamano89e135d2006-09-03 06:18:2564-----------------------------------------------------------------------
65$ git-rev-list origin..HEAD
66$ git-rev-list HEAD ^origin
67-----------------------------------------------------------------------
68
69Another special notation is "'<commit1>'...'<commit2>'" which is useful
70for merges. The resulting set of commits is the symmetric difference
Junio C Hamano872c5682006-07-07 06:05:4071between the two operands. The following two commands are equivalent:
72
Junio C Hamano89e135d2006-09-03 06:18:2573-----------------------------------------------------------------------
74$ git-rev-list A B --not $(git-merge-base --all A B)
75$ git-rev-list A...B
76-----------------------------------------------------------------------
77
78gitlink:git-rev-list[1] is a very essential git program, since it
79provides the ability to build and traverse commit ancestry graphs. For
80this reason, it has a lot of different options that enables it to be
81used by commands as different as gitlink:git-bisect[1] and
82gitlink:git-repack[1].
Junio C Hamano1a4e8412005-12-27 08:17:2383
84OPTIONS
85-------
Junio C Hamano89e135d2006-09-03 06:18:2586
87Commit Formatting
88~~~~~~~~~~~~~~~~~
89
90Using these options, gitlink:git-rev-list[1] will act similar to the
91more specialized family of commit log tools: gitlink:git-log[1],
92gitlink:git-show[1], and gitlink:git-whatchanged[1]
93
Junio C Hamano0430e3a2007-05-15 03:13:1794include::pretty-options.txt[]
Junio C Hamano89e135d2006-09-03 06:18:2595
96--relative-date::
97
Junio C Hamano45889b42007-04-26 07:20:0498Synonym for `--date=relative`.
99
Junio C Hamano02f130b2007-07-14 08:26:56100--date={relative,local,default,iso,rfc}::
Junio C Hamano45889b42007-04-26 07:20:04101
Junio C Hamano89e135d2006-09-03 06:18:25102Only takes effect for dates shown in human-readable format, such
103as when using "--pretty".
Junio C Hamano45889b42007-04-26 07:20:04104+
105`--date=relative` shows dates relative to the current time,
106e.g. "2 hours ago".
107+
108`--date=local` shows timestamps in user's local timezone.
109+
Junio C Hamano02f130b2007-07-14 08:26:56110`--date=iso` (or `--date=iso8601`) shows timestamps in ISO 8601 format.
111+
112`--date=rfc` (or `--date=rfc2822`) shows timestamps in RFC 2822
113format, often found in E-mail messages.
114+
115`--date=short` shows only date but not time, in `YYYY-MM-DD` fomat.
116+
Junio C Hamano45889b42007-04-26 07:20:04117`--date=default` shows timestamps in the original timezone
118(either committer's or author's).
Junio C Hamano1a4e8412005-12-27 08:17:23119
120--header::
Junio C Hamano89e135d2006-09-03 06:18:25121
122Print the contents of the commit in raw-format; each record is
123separated with a NUL character.
Junio C Hamano1a4e8412005-12-27 08:17:23124
Junio C Hamano7ccb9fd2006-07-15 01:38:40125--parents::
Junio C Hamano89e135d2006-09-03 06:18:25126
Junio C Hamano7ccb9fd2006-07-15 01:38:40127Print the parents of the commit.
128
Junio C Hamanoee695f22007-06-21 00:35:36129--timestamp::
130Print the raw commit timestamp.
131
Junio C Hamano5678d692007-04-06 00:51:43132--left-right::
133
134Mark which side of a symmetric diff a commit is reachable from.
135Commits from the left side are prefixed with `<` and those from
136the right with `>`. If combined with `--boundary`, those
137commits are prefixed with `-`.
138+
139For example, if you have this topology:
140+
141-----------------------------------------------------------------------
142 y---b---b branch B
143 / \ /
144 / .
145 / / \
146 o---x---a---a branch A
147-----------------------------------------------------------------------
148+
149you would get an output line this:
150+
151-----------------------------------------------------------------------
152$ git rev-list --left-right --boundary --pretty=oneline A...B
153
154>bbbbbbb... 3rd on b
155>bbbbbbb... 2nd on b
156<aaaaaaa... 3rd on a
157<aaaaaaa... 2nd on a
158-yyyyyyy... 1st on b
159-xxxxxxx... 1st on a
160-----------------------------------------------------------------------
161
Junio C Hamano89e135d2006-09-03 06:18:25162Diff Formatting
163~~~~~~~~~~~~~~~
Junio C Hamano1a4e8412005-12-27 08:17:23164
Junio C Hamano89e135d2006-09-03 06:18:25165Below are listed options that control the formatting of diff output.
166Some of them are specific to gitlink:git-rev-list[1], however other diff
167options may be given. See gitlink:git-diff-files[1] for more options.
Junio C Hamano5f327762006-03-02 09:14:51168
Junio C Hamano89e135d2006-09-03 06:18:25169-c::
Junio C Hamano1a4e8412005-12-27 08:17:23170
Junio C Hamano89e135d2006-09-03 06:18:25171This flag changes the way a merge commit is displayed. It shows
172the differences from each of the parents to the merge result
173simultaneously instead of showing pairwise diff between a parent
174and the result one at a time. Furthermore, it lists only files
175which were modified from all parents.
Junio C Hamano1a4e8412005-12-27 08:17:23176
Junio C Hamano89e135d2006-09-03 06:18:25177--cc::
178
179This flag implies the '-c' options and further compresses the
180patch output by omitting hunks that show differences from only
181one parent, or show the same change from all but one parent for
182an Octopus merge.
183
184-r::
185
186Show recursive diffs.
187
188-t::
189
190Show the tree objects in the diff output. This implies '-r'.
191
192Commit Limiting
193~~~~~~~~~~~~~~~
194
195Besides specifying a range of commits that should be listed using the
196special notations explained in the description, additional commit
197limiting may be applied.
198
199--
200
201-n 'number', --max-count='number'::
202
Junio C Hamano1a4e8412005-12-27 08:17:23203Limit the number of commits output.
204
Junio C Hamano17bbaca2006-12-25 11:36:31205--skip='number'::
206
207Skip 'number' commits before starting to show the commit output.
208
Junio C Hamano89e135d2006-09-03 06:18:25209--since='date', --after='date'::
210
211Show commits more recent than a specific date.
212
213--until='date', --before='date'::
214
215Show commits older than a specific date.
216
217--max-age='timestamp', --min-age='timestamp'::
218
Junio C Hamano1a4e8412005-12-27 08:17:23219Limit the commits output to specified time range.
220
Junio C Hamano47c1e3c2006-09-25 04:45:55221--author='pattern', --committer='pattern'::
222
223Limit the commits output to ones with author/committer
Junio C Hamano75485c82007-05-19 04:20:33224header lines that match the specified pattern (regular expression).
Junio C Hamano47c1e3c2006-09-25 04:45:55225
226--grep='pattern'::
227
228Limit the commits output to ones with log message that
Junio C Hamano75485c82007-05-19 04:20:33229matches the specified pattern (regular expression).
Junio C Hamano47c1e3c2006-09-25 04:45:55230
Junio C Hamanode9879a2007-07-22 09:33:42231-i, --regexp-ignore-case::
Junio C Hamanoa5c02c52007-05-21 06:14:27232
233Match the regexp limiting patterns without regard to letters case.
234
Junio C Hamanode9879a2007-07-22 09:33:42235-E, --extended-regexp::
Junio C Hamanoa5c02c52007-05-21 06:14:27236
237Consider the limiting patterns to be extended regular expressions
238instead of the default basic regular expressions.
239
Junio C Hamano9be18972006-01-28 08:54:57240--remove-empty::
Junio C Hamano89e135d2006-09-03 06:18:25241
Junio C Hamano9be18972006-01-28 08:54:57242Stop when a given path disappears from the tree.
243
Junio C Hamanoee695f22007-06-21 00:35:36244--full-history::
245
246Show also parts of history irrelevant to current state of a given
247path. This turns off history simplification, which removed merges
248which didn't change anything at all at some child. It will still actually
249simplify away merges that didn't change anything at all into either
250child.
251
Junio C Hamano7ccb9fd2006-07-15 01:38:40252--no-merges::
Junio C Hamano89e135d2006-09-03 06:18:25253
Junio C Hamano7ccb9fd2006-07-15 01:38:40254Do not print commits with more than one parent.
255
Junio C Hamano872c5682006-07-07 06:05:40256--not::
Junio C Hamano89e135d2006-09-03 06:18:25257
258Reverses the meaning of the '{caret}' prefix (or lack thereof)
259for all following revision specifiers, up to the next '--not'.
Junio C Hamano872c5682006-07-07 06:05:40260
Junio C Hamano1a4e8412005-12-27 08:17:23261--all::
Junio C Hamano1a4e8412005-12-27 08:17:23262
Junio C Hamano89e135d2006-09-03 06:18:25263Pretend as if all the refs in `$GIT_DIR/refs/` are listed on the
264command line as '<commit>'.
Junio C Hamano1a4e8412005-12-27 08:17:23265
Junio C Hamanoc9245d92006-09-06 09:35:46266--stdin::
267
268In addition to the '<commit>' listed on the command
269line, read them from the standard input.
270
Junio C Hamanod9e0e5d2007-04-14 16:22:04271--cherry-pick::
272
273Omit any commit that introduces the same change as
274another commit on the "other side" when the set of
275commits are limited with symmetric difference.
276+
277For example, if you have two branches, `A` and `B`, a usual way
278to list all commits on only one side of them is with
279`--left-right`, like the example above in the description of
280that option. It however shows the commits that were cherry-picked
281from the other branch (for example, "3rd on b" may be cherry-picked
282from branch A). With this option, such pairs of commits are
283excluded from the output.
284
Junio C Hamanofa0d4cf2007-01-25 02:23:58285-g, --walk-reflogs::
Junio C Hamanodb450ba2007-01-21 08:57:14286
287Instead of walking the commit ancestry chain, walk
288reflog entries from the most recent one to older ones.
289When this option is used you cannot specify commits to
290exclude (that is, '{caret}commit', 'commit1..commit2',
291nor 'commit1...commit2' notations cannot be used).
292+
293With '\--pretty' format other than oneline (for obvious reasons),
294this causes the output to have two extra lines of information
Junio C Hamano1d90cb02007-07-03 07:05:31295taken from the reflog. By default, 'commit@\{Nth}' notation is
Junio C Hamanodb450ba2007-01-21 08:57:14296used in the output. When the starting commit is specified as
Junio C Hamano1d90cb02007-07-03 07:05:31297'commit@{now}', output also uses 'commit@\{timestamp}' notation
Junio C Hamanodb450ba2007-01-21 08:57:14298instead. Under '\--pretty=oneline', the commit message is
299prefixed with this information on the same line.
300
Junio C Hamano859f3b42006-08-04 10:04:30301--merge::
Junio C Hamano89e135d2006-09-03 06:18:25302
Junio C Hamano859f3b42006-08-04 10:04:30303After a failed merge, show refs that touch files having a
304conflict and don't exist on all heads to merge.
305
Junio C Hamano89e135d2006-09-03 06:18:25306--boundary::
307
308Output uninteresting commits at the boundary, which are usually
309not shown.
310
311--dense, --sparse::
312
313When optional paths are given, the default behaviour ('--dense') is to
314only output commits that changes at least one of them, and also ignore
315merges that do not touch the given paths.
316
317Use the '--sparse' flag to makes the command output all eligible commits
318(still subject to count and age limitation), but apply merge
319simplification nevertheless.
320
321--bisect::
322
323Limit output to the one commit object which is roughly halfway between
324the included and excluded commits. Thus, if
325
326-----------------------------------------------------------------------
327$ git-rev-list --bisect foo ^bar ^baz
328-----------------------------------------------------------------------
329
330outputs 'midpoint', the output of the two commands
331
332-----------------------------------------------------------------------
333$ git-rev-list foo ^midpoint
334$ git-rev-list midpoint ^bar ^baz
335-----------------------------------------------------------------------
336
337would be of roughly the same length. Finding the change which
338introduces a regression is thus reduced to a binary search: repeatedly
339generate and test new 'midpoint's until the commit chain is of length
340one.
341
Junio C Hamano20f64da2007-04-04 18:38:30342--bisect-vars::
343
344This calculates the same as `--bisect`, but outputs text ready
345to be eval'ed by the shell. These lines will assign the name of
346the midpoint revision to the variable `bisect_rev`, and the
347expected number of commits to be tested after `bisect_rev` is
348tested to `bisect_nr`, the expected number of commits to be
349tested if `bisect_rev` turns out to be good to `bisect_good`,
350the expected number of commits to be tested if `bisect_rev`
351turns out to be bad to `bisect_bad`, and the number of commits
352we are bisecting right now to `bisect_all`.
353
Junio C Hamano89e135d2006-09-03 06:18:25354--
355
356Commit Ordering
357~~~~~~~~~~~~~~~
358
359By default, the commits are shown in reverse chronological order.
360
361--topo-order::
362
363This option makes them appear in topological order (i.e.
364descendant commits are shown before their parents).
365
366--date-order::
367
368This option is similar to '--topo-order' in the sense that no
369parent comes before all of its children, but otherwise things
370are still ordered in the commit timestamp order.
371
Junio C Hamano053827f2007-02-14 07:23:58372--reverse::
373
374Output the commits in reverse order.
375
Junio C Hamano89e135d2006-09-03 06:18:25376Object Traversal
377~~~~~~~~~~~~~~~~
378
379These options are mostly targeted for packing of git repositories.
380
381--objects::
382
383Print the object IDs of any object referenced by the listed
384commits. 'git-rev-list --objects foo ^bar' thus means "send me
385all object IDs which I need to download if I have the commit
386object 'bar', but not 'foo'".
387
388--objects-edge::
389
390Similar to '--objects', but also print the IDs of excluded
391commits prefixed with a "-" character. This is used by
392gitlink:git-pack-objects[1] to build "thin" pack, which records
393objects in deltified form based on objects contained in these
394excluded commits to reduce network traffic.
395
396--unpacked::
397
398Only useful with '--objects'; print the object IDs that are not
399in packs.
Junio C Hamanoa0778c92006-08-29 04:03:11400
Junio C Hamano0430e3a2007-05-15 03:13:17401
402include::pretty-formats.txt[]
403
404
Junio C Hamano1a4e8412005-12-27 08:17:23405Author
406------
407Written by Linus Torvalds <torvalds@osdl.org>
408
Junio C Hamano1a4e8412005-12-27 08:17:23409Documentation
410--------------
Junio C Hamano89e135d2006-09-03 06:18:25411Documentation by David Greaves, Junio C Hamano, Jonas Fonseca
412and the git-list <git@vger.kernel.org>.
Junio C Hamano1a4e8412005-12-27 08:17:23413
414GIT
415---
416Part of the gitlink:git[7] suite