blob: 2991d70a4a24d10c7f121b766d5f52545414b591 [file] [log] [blame]
Junio C Hamanob0e02952008-01-19 08:02:001Commit Limiting
2~~~~~~~~~~~~~~~
3
4Besides specifying a range of commits that should be listed using the
5special notations explained in the description, additional commit
Junio C Hamano8ce35d72012-09-18 22:30:426limiting may be applied.
7
8Using more options generally further limits the output (e.g.
9`--since=<date1>` limits to commits newer than `<date1>`, and using it
10with `--grep=<pattern>` further limits to commits whose log message
11has a line that matches `<pattern>`), unless otherwise noted.
12
13Note that these are applied before commit
14ordering and formatting options, such as `--reverse`.
Junio C Hamanob0e02952008-01-19 08:02:0015
16--
17
Junio C Hamano693e7092012-09-12 22:56:5318-<number>::
19-n <number>::
Junio C Hamanob4a9ede2009-04-08 07:36:3220--max-count=<number>::
Junio C Hamanoc5be4cc2011-03-09 07:20:4321Limit the number of commits to output.
Junio C Hamanob0e02952008-01-19 08:02:0022
Junio C Hamanob4a9ede2009-04-08 07:36:3223--skip=<number>::
Junio C Hamanob0e02952008-01-19 08:02:0024Skip 'number' commits before starting to show the commit output.
25
Junio C Hamanob4a9ede2009-04-08 07:36:3226--since=<date>::
27--after=<date>::
Junio C Hamanob0e02952008-01-19 08:02:0028Show commits more recent than a specific date.
29
Junio C Hamanob4a9ede2009-04-08 07:36:3230--until=<date>::
31--before=<date>::
Junio C Hamanob0e02952008-01-19 08:02:0032Show commits older than a specific date.
33
Junio C Hamano4f1d8c42008-03-03 02:01:1634ifdef::git-rev-list[]
Junio C Hamanob4a9ede2009-04-08 07:36:3235--max-age=<timestamp>::
36--min-age=<timestamp>::
Junio C Hamanob0e02952008-01-19 08:02:0037Limit the commits output to specified time range.
Junio C Hamano4f1d8c42008-03-03 02:01:1638endif::git-rev-list[]
Junio C Hamanob0e02952008-01-19 08:02:0039
Junio C Hamanob4a9ede2009-04-08 07:36:3240--author=<pattern>::
41--committer=<pattern>::
Junio C Hamanob0e02952008-01-19 08:02:0042Limit the commits output to ones with author/committer
Junio C Hamano8ce35d72012-09-18 22:30:4243header lines that match the specified pattern (regular
44expression). With more than one `--author=<pattern>`,
45commits whose author matches any of the given patterns are
46chosen (similarly for multiple `--committer=<pattern>`).
Junio C Hamanob0e02952008-01-19 08:02:0047
Junio C Hamano9954ed72012-10-03 04:54:0048--grep-reflog=<pattern>::
Junio C Hamano9954ed72012-10-03 04:54:0049Limit the commits output to ones with reflog entries that
50match the specified pattern (regular expression). With
51more than one `--grep-reflog`, commits whose reflog message
52matches any of the given patterns are chosen. It is an
53error to use this option unless `--walk-reflogs` is in use.
54
Junio C Hamanob4a9ede2009-04-08 07:36:3255--grep=<pattern>::
Junio C Hamanob0e02952008-01-19 08:02:0056Limit the commits output to ones with log message that
Junio C Hamano8ce35d72012-09-18 22:30:4257matches the specified pattern (regular expression). With
58more than one `--grep=<pattern>`, commits whose message
59matches any of the given patterns are chosen (but see
60`--all-match`).
Junio C Hamano9954ed72012-10-03 04:54:0061+
62When `--show-notes` is in effect, the message from the notes as
63if it is part of the log message.
Junio C Hamanob0e02952008-01-19 08:02:0064
Junio C Hamanoaa17c7c2008-11-03 04:36:5865--all-match::
Junio C Hamanob73af6c2013-12-03 22:07:1166Limit the commits output to ones that match all given `--grep`,
Junio C Hamano8ce35d72012-09-18 22:30:4267instead of ones that match at least one.
Junio C Hamanoaa17c7c2008-11-03 04:36:5868
Junio C Hamanoeb415992008-06-08 22:49:4769-i::
70--regexp-ignore-case::
Junio C Hamanob73af6c2013-12-03 22:07:1171Match the regular expression limiting patterns without regard to letter
72case.
Junio C Hamanob0e02952008-01-19 08:02:0073
Junio C Hamanoa1295452012-11-13 22:32:0474--basic-regexp::
Junio C Hamanoa1295452012-11-13 22:32:0475Consider the limiting patterns to be basic regular expressions;
76this is the default.
77
Junio C Hamanoeb415992008-06-08 22:49:4778-E::
79--extended-regexp::
Junio C Hamanob0e02952008-01-19 08:02:0080Consider the limiting patterns to be extended regular expressions
81instead of the default basic regular expressions.
82
Junio C Hamanoeb415992008-06-08 22:49:4783-F::
84--fixed-strings::
Junio C Hamano24bc09a2008-02-28 00:27:4485Consider the limiting patterns to be fixed strings (don't interpret
86pattern as a regular expression).
87
Junio C Hamanoa1295452012-11-13 22:32:0488--perl-regexp::
Junio C Hamanob73af6c2013-12-03 22:07:1189Consider the limiting patterns to be Perl-compatible regular expressions.
Junio C Hamanoa1295452012-11-13 22:32:0490Requires libpcre to be compiled in.
91
Junio C Hamanob0e02952008-01-19 08:02:0092--remove-empty::
Junio C Hamanob0e02952008-01-19 08:02:0093Stop when a given path disappears from the tree.
94
Junio C Hamano934e1782009-07-16 06:59:1595--merges::
Junio C Hamanof32ce262011-03-27 07:35:1196Print only merge commits. This is exactly the same as `--min-parents=2`.
Junio C Hamano934e1782009-07-16 06:59:1597
Junio C Hamanob0e02952008-01-19 08:02:0098--no-merges::
Junio C Hamanof32ce262011-03-27 07:35:1199Do not print commits with more than one parent. This is
100exactly the same as `--max-parents=1`.
101
102--min-parents=<number>::
103--max-parents=<number>::
104--no-min-parents::
105--no-max-parents::
Junio C Hamanoc5bb3b32013-08-05 22:43:36106Show only commits which have at least (or at most) that many parent
Junio C Hamanof32ce262011-03-27 07:35:11107commits. In particular, `--max-parents=1` is the same as `--no-merges`,
108`--min-parents=2` is the same as `--merges`. `--max-parents=0`
109gives all root commits and `--min-parents=3` all octopus merges.
110+
111`--no-min-parents` and `--no-max-parents` reset these limits (to no limit)
112again. Equivalent forms are `--min-parents=0` (any commit has 0 or more
113parents) and `--max-parents=-1` (negative numbers denote no upper limit).
Junio C Hamanob0e02952008-01-19 08:02:00114
115--first-parent::
116Follow only the first parent commit upon seeing a merge
117commit. This option can give a better overview when
118viewing the evolution of a particular topic branch,
119because merges into a topic branch tend to be only about
120adjusting to updated upstream from time to time, and
121this option allows you to ignore the individual commits
122brought in to your history by such a merge.
123
124--not::
Junio C Hamanob0e02952008-01-19 08:02:00125Reverses the meaning of the '{caret}' prefix (or lack thereof)
Junio C Hamanob73af6c2013-12-03 22:07:11126for all following revision specifiers, up to the next `--not`.
Junio C Hamanob0e02952008-01-19 08:02:00127
128--all::
Junio C Hamano4fdccb22010-02-19 09:58:14129Pretend as if all the refs in `refs/` are listed on the
Junio C Hamanob0e02952008-01-19 08:02:00130command line as '<commit>'.
131
Junio C Hamanod2179ef2010-10-22 04:12:17132--branches[=<pattern>]::
Junio C Hamano4fdccb22010-02-19 09:58:14133Pretend as if all the refs in `refs/heads` are listed
Junio C Hamanod2179ef2010-10-22 04:12:17134on the command line as '<commit>'. If '<pattern>' is given, limit
Junio C Hamano57827fb2010-01-23 03:02:50135branches to ones matching given shell glob. If pattern lacks '?',
Junio C Hamano81d540a2012-03-02 19:52:47136'{asterisk}', or '[', '/{asterisk}' at the end is implied.
Junio C Hamano50819852008-11-19 02:07:56137
Junio C Hamanod2179ef2010-10-22 04:12:17138--tags[=<pattern>]::
Junio C Hamano4fdccb22010-02-19 09:58:14139Pretend as if all the refs in `refs/tags` are listed
Junio C Hamanod2179ef2010-10-22 04:12:17140on the command line as '<commit>'. If '<pattern>' is given, limit
Junio C Hamano81d540a2012-03-02 19:52:47141tags to ones matching given shell glob. If pattern lacks '?', '{asterisk}',
142or '[', '/{asterisk}' at the end is implied.
Junio C Hamano50819852008-11-19 02:07:56143
Junio C Hamanod2179ef2010-10-22 04:12:17144--remotes[=<pattern>]::
Junio C Hamano4fdccb22010-02-19 09:58:14145Pretend as if all the refs in `refs/remotes` are listed
Junio C Hamanod2179ef2010-10-22 04:12:17146on the command line as '<commit>'. If '<pattern>' is given, limit
Junio C Hamano97bcb482010-11-25 03:16:07147remote-tracking branches to ones matching given shell glob.
Junio C Hamano81d540a2012-03-02 19:52:47148If pattern lacks '?', '{asterisk}', or '[', '/{asterisk}' at the end is implied.
Junio C Hamano57827fb2010-01-23 03:02:50149
Junio C Hamanod2179ef2010-10-22 04:12:17150--glob=<glob-pattern>::
151Pretend as if all the refs matching shell glob '<glob-pattern>'
Junio C Hamano57827fb2010-01-23 03:02:50152are listed on the command line as '<commit>'. Leading 'refs/',
Junio C Hamano81d540a2012-03-02 19:52:47153is automatically prepended if missing. If pattern lacks '?', '{asterisk}',
154or '[', '/{asterisk}' at the end is implied.
Junio C Hamano57827fb2010-01-23 03:02:50155
Junio C Hamano084228c2011-05-30 08:13:52156--ignore-missing::
Junio C Hamano084228c2011-05-30 08:13:52157Upon seeing an invalid object name in the input, pretend as if
158the bad input was not given.
Junio C Hamano50819852008-11-19 02:07:56159
Junio C Hamano5706e0b2009-11-24 10:54:16160ifndef::git-rev-list[]
161--bisect::
Junio C Hamano4fdccb22010-02-19 09:58:14162Pretend as if the bad bisection ref `refs/bisect/bad`
Junio C Hamano5706e0b2009-11-24 10:54:16163was listed and as if it was followed by `--not` and the good
Junio C Hamano4fdccb22010-02-19 09:58:14164bisection refs `refs/bisect/good-*` on the command
Junio C Hamano5706e0b2009-11-24 10:54:16165line.
166endif::git-rev-list[]
167
Junio C Hamanob0e02952008-01-19 08:02:00168--stdin::
Junio C Hamanob0e02952008-01-19 08:02:00169In addition to the '<commit>' listed on the command
Junio C Hamano5706e0b2009-11-24 10:54:16170line, read them from the standard input. If a '--' separator is
171seen, stop reading commits and start reading paths to limit the
172result.
Junio C Hamanob0e02952008-01-19 08:02:00173
Junio C Hamano5706e0b2009-11-24 10:54:16174ifdef::git-rev-list[]
Junio C Hamanob0e02952008-01-19 08:02:00175--quiet::
Junio C Hamanob0e02952008-01-19 08:02:00176Don't print anything to standard output. This form
177is primarily meant to allow the caller to
178test the exit status to see if a range of objects is fully
179connected (or not). It is faster than redirecting stdout
Junio C Hamanob73af6c2013-12-03 22:07:11180to `/dev/null` as the output does not have to be formatted.
Junio C Hamano69cd7c52008-06-04 07:52:59181endif::git-rev-list[]
Junio C Hamanob0e02952008-01-19 08:02:00182
Junio C Hamano9a2fb2d2011-03-23 05:40:15183--cherry-mark::
Junio C Hamano9a2fb2d2011-03-23 05:40:15184Like `--cherry-pick` (see below) but mark equivalent commits
185with `=` rather than omitting them, and inequivalent ones with `+`.
186
Junio C Hamanob0e02952008-01-19 08:02:00187--cherry-pick::
Junio C Hamanob0e02952008-01-19 08:02:00188Omit any commit that introduces the same change as
Junio C Hamanob73af6c2013-12-03 22:07:11189another commit on the ``other side'' when the set of
Junio C Hamanob0e02952008-01-19 08:02:00190commits are limited with symmetric difference.
191+
192For example, if you have two branches, `A` and `B`, a usual way
193to list all commits on only one side of them is with
Junio C Hamano5cd15182011-04-05 00:21:10194`--left-right` (see the example below in the description of
Junio C Hamanob73af6c2013-12-03 22:07:11195the `--left-right` option). However, it shows the commits that were
196cherry-picked from the other branch (for example, ``3rd on b'' may be
197cherry-picked from branch A). With this option, such pairs of commits are
Junio C Hamanob0e02952008-01-19 08:02:00198excluded from the output.
199
Junio C Hamano9a2fb2d2011-03-23 05:40:15200--left-only::
201--right-only::
Junio C Hamano9a2fb2d2011-03-23 05:40:15202List only commits on the respective side of a symmetric range,
203i.e. only those which would be marked `<` resp. `>` by
204`--left-right`.
205+
206For example, `--cherry-pick --right-only A...B` omits those
207commits from `B` which are in `A` or are patch-equivalent to a commit in
Junio C Hamanob76a6862012-05-02 22:02:46208`A`. In other words, this lists the `+` commits from `git cherry A B`.
Junio C Hamano9a2fb2d2011-03-23 05:40:15209More precisely, `--cherry-pick --right-only --no-merges` gives the exact
210list.
211
212--cherry::
Junio C Hamano9a2fb2d2011-03-23 05:40:15213A synonym for `--right-only --cherry-mark --no-merges`; useful to
214limit the output to the commits on our side and mark those that
215have been applied to the other side of a forked history with
216`git log --cherry upstream...mybranch`, similar to
217`git cherry upstream mybranch`.
218
Junio C Hamanoeb415992008-06-08 22:49:47219-g::
220--walk-reflogs::
Junio C Hamanob0e02952008-01-19 08:02:00221Instead of walking the commit ancestry chain, walk
222reflog entries from the most recent one to older ones.
223When this option is used you cannot specify commits to
224exclude (that is, '{caret}commit', 'commit1..commit2',
Junio C Hamano2db3e752010-09-03 21:33:06225nor 'commit1\...commit2' notations cannot be used).
Junio C Hamanob0e02952008-01-19 08:02:00226+
Junio C Hamanob73af6c2013-12-03 22:07:11227With `--pretty` format other than `oneline` (for obvious reasons),
Junio C Hamanob0e02952008-01-19 08:02:00228this causes the output to have two extra lines of information
229taken from the reflog. By default, 'commit@\{Nth}' notation is
230used in the output. When the starting commit is specified as
Junio C Hamano1d368882008-08-11 22:03:10231'commit@\{now}', output also uses 'commit@\{timestamp}' notation
Junio C Hamanob73af6c2013-12-03 22:07:11232instead. Under `--pretty=oneline`, the commit message is
Junio C Hamanob0e02952008-01-19 08:02:00233prefixed with this information on the same line.
Junio C Hamanob73af6c2013-12-03 22:07:11234This option cannot be combined with `--reverse`.
Junio C Hamanob0e02952008-01-19 08:02:00235See also linkgit:git-reflog[1].
236
237--merge::
Junio C Hamanob0e02952008-01-19 08:02:00238After a failed merge, show refs that touch files having a
239conflict and don't exist on all heads to merge.
240
241--boundary::
Junio C Hamano27159f82013-06-14 17:19:22242Output excluded boundary commits. Boundary commits are
243prefixed with `-`.
Junio C Hamanob0e02952008-01-19 08:02:00244
Junio C Hamanoa76cb0d2008-08-13 20:04:10245--
246
247History Simplification
248~~~~~~~~~~~~~~~~~~~~~~
249
Junio C Hamano28363492008-11-14 08:26:31250Sometimes you are only interested in parts of the history, for example the
251commits modifying a particular <path>. But there are two parts of
252'History Simplification', one part is selecting the commits and the other
253is how to do it, as there are various strategies to simplify the history.
254
255The following options select the commits to be shown:
256
257<paths>::
Junio C Hamano28363492008-11-14 08:26:31258Commits modifying the given <paths> are selected.
259
260--simplify-by-decoration::
Junio C Hamano28363492008-11-14 08:26:31261Commits that are referred by some branch or tag are selected.
262
263Note that extra commits can be shown to give a meaningful history.
264
265The following options affect the way the simplification is performed:
266
267Default mode::
Junio C Hamano28363492008-11-14 08:26:31268Simplifies the history to the simplest history explaining the
269final state of the tree. Simplest because it prunes some side
270branches if the end result is the same (i.e. merging branches
271with the same content)
272
273--full-history::
Junio C Hamano15567bc2011-07-23 00:51:59274Same as the default mode, but does not prune some history.
Junio C Hamano28363492008-11-14 08:26:31275
276--dense::
Junio C Hamano28363492008-11-14 08:26:31277Only the selected commits are shown, plus some to have a
278meaningful history.
279
280--sparse::
Junio C Hamano28363492008-11-14 08:26:31281All commits in the simplified history are shown.
282
283--simplify-merges::
Junio C Hamanob73af6c2013-12-03 22:07:11284Additional option to `--full-history` to remove some needless
Junio C Hamano28363492008-11-14 08:26:31285merges from the resulting history, as there are no selected
286commits contributing to this merge.
287
Junio C Hamano89a57342010-06-22 23:22:55288--ancestry-path::
Junio C Hamano89a57342010-06-22 23:22:55289When given a range of commits to display (e.g. 'commit1..commit2'
290or 'commit2 {caret}commit1'), only display commits that exist
291directly on the ancestry chain between the 'commit1' and
292'commit2', i.e. commits that are both descendants of 'commit1',
293and ancestors of 'commit2'.
294
Junio C Hamano28363492008-11-14 08:26:31295A more detailed explanation follows.
Junio C Hamanoa76cb0d2008-08-13 20:04:10296
297Suppose you specified `foo` as the <paths>. We shall call commits
298that modify `foo` !TREESAME, and the rest TREESAME. (In a diff
299filtered for `foo`, they look different and equal, respectively.)
300
301In the following, we will always refer to the same example history to
302illustrate the differences between simplification settings. We assume
303that you are filtering for a file `foo` in this commit graph:
304-----------------------------------------------------------------------
Junio C Hamano27159f82013-06-14 17:19:22305 .-A---M---N---O---P---Q
306 / / / / / /
307I B C D E Y
308 \ / / / / /
309 `-------------' X
Junio C Hamanoa76cb0d2008-08-13 20:04:10310-----------------------------------------------------------------------
Junio C Hamano27159f82013-06-14 17:19:22311The horizontal line of history A---Q is taken to be the first parent of
Junio C Hamanoa76cb0d2008-08-13 20:04:10312each merge. The commits are:
313
314* `I` is the initial commit, in which `foo` exists with contents
Junio C Hamanob73af6c2013-12-03 22:07:11315 ``asdf'', and a file `quux` exists with contents ``quux''. Initial
Junio C Hamanoa76cb0d2008-08-13 20:04:10316 commits are compared to an empty tree, so `I` is !TREESAME.
317
Junio C Hamanob73af6c2013-12-03 22:07:11318* In `A`, `foo` contains just ``foo''.
Junio C Hamanoa76cb0d2008-08-13 20:04:10319
320* `B` contains the same change as `A`. Its merge `M` is trivial and
321 hence TREESAME to all parents.
322
Junio C Hamanob73af6c2013-12-03 22:07:11323* `C` does not change `foo`, but its merge `N` changes it to ``foobar'',
Junio C Hamanoa76cb0d2008-08-13 20:04:10324 so it is not TREESAME to any parent.
325
Junio C Hamanob73af6c2013-12-03 22:07:11326* `D` sets `foo` to ``baz''. Its merge `O` combines the strings from
327 `N` and `D` to ``foobarbaz''; i.e., it is not TREESAME to any parent.
Junio C Hamanoa76cb0d2008-08-13 20:04:10328
Junio C Hamanob73af6c2013-12-03 22:07:11329* `E` changes `quux` to ``xyzzy'', and its merge `P` combines the
330 strings to ``quux xyzzy''. `P` is TREESAME to `O`, but not to `E`.
Junio C Hamano27159f82013-06-14 17:19:22331
Junio C Hamanod7fccbf2013-07-25 03:24:57332* `X` is an independent root commit that added a new file `side`, and `Y`
Junio C Hamano27159f82013-06-14 17:19:22333 modified it. `Y` is TREESAME to `X`. Its merge `Q` added `side` to `P`, and
334 `Q` is TREESAME to `P`, but not to `Y`.
Junio C Hamanoa76cb0d2008-08-13 20:04:10335
Junio C Hamanob73af6c2013-12-03 22:07:11336`rev-list` walks backwards through history, including or excluding
337commits based on whether `--full-history` and/or parent rewriting
338(via `--parents` or `--children`) are used. The following settings
Junio C Hamanoa76cb0d2008-08-13 20:04:10339are available.
340
341Default mode::
Junio C Hamanoa76cb0d2008-08-13 20:04:10342Commits are included if they are not TREESAME to any parent
Junio C Hamanob73af6c2013-12-03 22:07:11343(though this can be changed, see `--sparse` below). If the
Junio C Hamanoa76cb0d2008-08-13 20:04:10344commit was a merge, and it was TREESAME to one parent, follow
345only that parent. (Even if there are several TREESAME
346parents, follow only one of them.) Otherwise, follow all
347parents.
348+
349This results in:
350+
351-----------------------------------------------------------------------
352 .-A---N---O
Junio C Hamano89a57342010-06-22 23:22:55353 / / /
Junio C Hamanoa76cb0d2008-08-13 20:04:10354I---------D
355-----------------------------------------------------------------------
356+
357Note how the rule to only follow the TREESAME parent, if one is
358available, removed `B` from consideration entirely. `C` was
359considered via `N`, but is TREESAME. Root commits are compared to an
360empty tree, so `I` is !TREESAME.
361+
Junio C Hamanob73af6c2013-12-03 22:07:11362Parent/child relations are only visible with `--parents`, but that does
Junio C Hamanoa76cb0d2008-08-13 20:04:10363not affect the commits selected in default mode, so we have shown the
364parent lines.
365
366--full-history without parent rewriting::
Junio C Hamanoa76cb0d2008-08-13 20:04:10367This mode differs from the default in one point: always follow
368all parents of a merge, even if it is TREESAME to one of them.
369Even if more than one side of the merge has commits that are
370included, this does not imply that the merge itself is! In
371the example, we get
372+
373-----------------------------------------------------------------------
Junio C Hamano27159f82013-06-14 17:19:22374I A B N D O P Q
Junio C Hamanoa76cb0d2008-08-13 20:04:10375-----------------------------------------------------------------------
376+
Junio C Hamano27159f82013-06-14 17:19:22377`M` was excluded because it is TREESAME to both parents. `E`,
Junio C Hamanoa76cb0d2008-08-13 20:04:10378`C` and `B` were all walked, but only `B` was !TREESAME, so the others
379do not appear.
380+
381Note that without parent rewriting, it is not really possible to talk
382about the parent/child relationships between the commits, so we show
383them disconnected.
384
385--full-history with parent rewriting::
Junio C Hamanoa76cb0d2008-08-13 20:04:10386Ordinary commits are only included if they are !TREESAME
Junio C Hamanob73af6c2013-12-03 22:07:11387(though this can be changed, see `--sparse` below).
Junio C Hamanoa76cb0d2008-08-13 20:04:10388+
389Merges are always included. However, their parent list is rewritten:
390Along each parent, prune away commits that are not included
391themselves. This results in
392+
393-----------------------------------------------------------------------
Junio C Hamano27159f82013-06-14 17:19:22394 .-A---M---N---O---P---Q
Junio C Hamanoa76cb0d2008-08-13 20:04:10395 / / / / /
396I B / D /
397 \ / / / /
398 `-------------'
399-----------------------------------------------------------------------
400+
Junio C Hamanob73af6c2013-12-03 22:07:11401Compare to `--full-history` without rewriting above. Note that `E`
Junio C Hamanoa76cb0d2008-08-13 20:04:10402was pruned away because it is TREESAME, but the parent list of P was
403rewritten to contain `E`'s parent `I`. The same happened for `C` and
Junio C Hamano27159f82013-06-14 17:19:22404`N`, and `X`, `Y` and `Q`.
Junio C Hamanoa76cb0d2008-08-13 20:04:10405
406In addition to the above settings, you can change whether TREESAME
407affects inclusion:
408
Junio C Hamanoeb415992008-06-08 22:49:47409--dense::
Junio C Hamanoa76cb0d2008-08-13 20:04:10410Commits that are walked are included if they are not TREESAME
411to any parent.
412
Junio C Hamanoeb415992008-06-08 22:49:47413--sparse::
Junio C Hamanoa76cb0d2008-08-13 20:04:10414All commits that are walked are included.
415+
Junio C Hamanob73af6c2013-12-03 22:07:11416Note that without `--full-history`, this still simplifies merges: if
Junio C Hamanoa76cb0d2008-08-13 20:04:10417one of the parents is TREESAME, we follow only that one, so the other
418sides of the merge are never walked.
Junio C Hamanob0e02952008-01-19 08:02:00419
Junio C Hamanoa2f46622008-09-03 05:20:31420--simplify-merges::
Junio C Hamanoa2f46622008-09-03 05:20:31421First, build a history graph in the same way that
Junio C Hamanob73af6c2013-12-03 22:07:11422`--full-history` with parent rewriting does (see above).
Junio C Hamanoa2f46622008-09-03 05:20:31423+
424Then simplify each commit `C` to its replacement `C'` in the final
425history according to the following rules:
426+
427--
428* Set `C'` to `C`.
429+
430* Replace each parent `P` of `C'` with its simplification `P'`. In
Junio C Hamano27159f82013-06-14 17:19:22431 the process, drop parents that are ancestors of other parents or that are
432 root commits TREESAME to an empty tree, and remove duplicates, but take care
433 to never drop all parents that we are TREESAME to.
Junio C Hamanoa2f46622008-09-03 05:20:31434+
435* If after this parent rewriting, `C'` is a root or merge commit (has
436 zero or >1 parents), a boundary commit, or !TREESAME, it remains.
437 Otherwise, it is replaced with its only parent.
438--
439+
440The effect of this is best shown by way of comparing to
Junio C Hamanob73af6c2013-12-03 22:07:11441`--full-history` with parent rewriting. The example turns into:
Junio C Hamanoa2f46622008-09-03 05:20:31442+
443-----------------------------------------------------------------------
444 .-A---M---N---O
445 / / /
446I B D
447 \ / /
448 `---------'
449-----------------------------------------------------------------------
450+
Junio C Hamanob73af6c2013-12-03 22:07:11451Note the major differences in `N`, `P`, and `Q` over `--full-history`:
Junio C Hamanoa2f46622008-09-03 05:20:31452+
453--
454* `N`'s parent list had `I` removed, because it is an ancestor of the
455 other parent `M`. Still, `N` remained because it is !TREESAME.
456+
457* `P`'s parent list similarly had `I` removed. `P` was then
458 removed completely, because it had one parent and is TREESAME.
Junio C Hamano27159f82013-06-14 17:19:22459+
460* `Q`'s parent list had `Y` simplified to `X`. `X` was then removed, because it
461 was a TREESAME root. `Q` was then removed completely, because it had one
462 parent and is TREESAME.
Junio C Hamanoa2f46622008-09-03 05:20:31463--
Junio C Hamanob0e02952008-01-19 08:02:00464
Junio C Hamano89a57342010-06-22 23:22:55465Finally, there is a fifth simplification mode available:
466
467--ancestry-path::
Junio C Hamano89a57342010-06-22 23:22:55468Limit the displayed commits to those directly on the ancestry
Junio C Hamanob73af6c2013-12-03 22:07:11469chain between the ``from'' and ``to'' commits in the given commit
470range. I.e. only display commits that are ancestor of the ``to''
471commit and descendants of the ``from'' commit.
Junio C Hamano89a57342010-06-22 23:22:55472+
473As an example use case, consider the following commit history:
474+
475-----------------------------------------------------------------------
476 D---E-------F
477 / \ \
478 B---C---G---H---I---J
479 / \
480A-------K---------------L--M
481-----------------------------------------------------------------------
482+
483A regular 'D..M' computes the set of commits that are ancestors of `M`,
484but excludes the ones that are ancestors of `D`. This is useful to see
485what happened to the history leading to `M` since `D`, in the sense
Junio C Hamanob73af6c2013-12-03 22:07:11486that ``what does `M` have that did not exist in `D`''. The result in this
Junio C Hamano89a57342010-06-22 23:22:55487example would be all the commits, except `A` and `B` (and `D` itself,
488of course).
489+
490When we want to find out what commits in `M` are contaminated with the
491bug introduced by `D` and need fixing, however, we might want to view
492only the subset of 'D..M' that are actually descendants of `D`, i.e.
Junio C Hamanob73af6c2013-12-03 22:07:11493excluding `C` and `K`. This is exactly what the `--ancestry-path`
Junio C Hamano89a57342010-06-22 23:22:55494option does. Applied to the 'D..M' range, it results in:
495+
496-----------------------------------------------------------------------
497E-------F
498 \ \
499 G---H---I---J
500 \
501L--M
502-----------------------------------------------------------------------
503
Junio C Hamanob73af6c2013-12-03 22:07:11504The `--simplify-by-decoration` option allows you to view only the
Junio C Hamano28363492008-11-14 08:26:31505big picture of the topology of the history, by omitting commits
506that are not referenced by tags. Commits are marked as !TREESAME
507(in other words, kept after history simplification rules described
508above) if (1) they are referenced by tags, or (2) they change the
509contents of the paths given on the command line. All other
510commits are marked as TREESAME (subject to be simplified away).
511
Junio C Hamanob0e02952008-01-19 08:02:00512ifdef::git-rev-list[]
Junio C Hamanoa76cb0d2008-08-13 20:04:10513Bisection Helpers
514~~~~~~~~~~~~~~~~~
515
Junio C Hamanob0e02952008-01-19 08:02:00516--bisect::
Junio C Hamanob73af6c2013-12-03 22:07:11517Limit output to the one commit object which is roughly halfway between
518included and excluded commits. Note that the bad bisection ref
519`refs/bisect/bad` is added to the included commits (if it
520exists) and the good bisection refs `refs/bisect/good-*` are
521added to the excluded commits (if they exist). Thus, supposing there
522are no refs in `refs/bisect/`, if
523+
Junio C Hamanob0e02952008-01-19 08:02:00524-----------------------------------------------------------------------
Junio C Hamano175a1bd2008-11-10 00:08:57525$ git rev-list --bisect foo ^bar ^baz
Junio C Hamanob0e02952008-01-19 08:02:00526-----------------------------------------------------------------------
Junio C Hamanob73af6c2013-12-03 22:07:11527+
Junio C Hamanob0e02952008-01-19 08:02:00528outputs 'midpoint', the output of the two commands
Junio C Hamanob73af6c2013-12-03 22:07:11529+
Junio C Hamanob0e02952008-01-19 08:02:00530-----------------------------------------------------------------------
Junio C Hamano175a1bd2008-11-10 00:08:57531$ git rev-list foo ^midpoint
532$ git rev-list midpoint ^bar ^baz
Junio C Hamanob0e02952008-01-19 08:02:00533-----------------------------------------------------------------------
Junio C Hamanob73af6c2013-12-03 22:07:11534+
Junio C Hamanob0e02952008-01-19 08:02:00535would be of roughly the same length. Finding the change which
536introduces a regression is thus reduced to a binary search: repeatedly
537generate and test new 'midpoint's until the commit chain is of length
538one.
539
540--bisect-vars::
Junio C Hamanob73af6c2013-12-03 22:07:11541This calculates the same as `--bisect`, except that refs in
542`refs/bisect/` are not used, and except that this outputs
543text ready to be eval'ed by the shell. These lines will assign the
544name of the midpoint revision to the variable `bisect_rev`, and the
545expected number of commits to be tested after `bisect_rev` is tested
546to `bisect_nr`, the expected number of commits to be tested if
547`bisect_rev` turns out to be good to `bisect_good`, the expected
548number of commits to be tested if `bisect_rev` turns out to be bad to
549`bisect_bad`, and the number of commits we are bisecting right now to
550`bisect_all`.
Junio C Hamanob0e02952008-01-19 08:02:00551
552--bisect-all::
Junio C Hamanob73af6c2013-12-03 22:07:11553This outputs all the commit objects between the included and excluded
554commits, ordered by their distance to the included and excluded
555commits. Refs in `refs/bisect/` are not used. The farthest
556from them is displayed first. (This is the only one displayed by
557`--bisect`.)
Junio C Hamano792c5a92009-03-08 08:45:13558+
Junio C Hamanob0e02952008-01-19 08:02:00559This is useful because it makes it easy to choose a good commit to
560test when you want to avoid to test some of them for some reason (they
561may not compile for example).
Junio C Hamano792c5a92009-03-08 08:45:13562+
Junio C Hamanob0e02952008-01-19 08:02:00563This option can be used along with `--bisect-vars`, in this case,
564after all the sorted commit objects, there will be the same text as if
565`--bisect-vars` had been used alone.
566endif::git-rev-list[]
567
Junio C Hamanob0e02952008-01-19 08:02:00568
569Commit Ordering
570~~~~~~~~~~~~~~~
571
572By default, the commits are shown in reverse chronological order.
573
Junio C Hamanob0e02952008-01-19 08:02:00574--date-order::
Junio C Hamanod0316112012-08-22 19:55:29575Show no parents before all of its children are shown, but
576otherwise show commits in the commit timestamp order.
Junio C Hamanob0e02952008-01-19 08:02:00577
Junio C Hamanoa1952302013-07-01 21:31:18578--author-date-order::
579Show no parents before all of its children are shown, but
580otherwise show commits in the author timestamp order.
581
Junio C Hamanod0316112012-08-22 19:55:29582--topo-order::
583Show no parents before all of its children are shown, and
584avoid showing commits on multiple lines of history
585intermixed.
586+
587For example, in a commit history like this:
588+
589----------------------------------------------------------------
590
591 ---1----2----4----7
592\ \
593 3----5----6----8---
594
595----------------------------------------------------------------
596+
597where the numbers denote the order of commit timestamps, `git
598rev-list` and friends with `--date-order` show the commits in the
599timestamp order: 8 7 6 5 4 3 2 1.
600+
601With `--topo-order`, they would show 8 6 5 3 7 4 2 1 (or 8 7 4 2 6 5
6023 1); some older commits are shown before newer ones in order to
603avoid showing the commits from two parallel development track mixed
604together.
Junio C Hamanob0e02952008-01-19 08:02:00605
606--reverse::
Junio C Hamanob0e02952008-01-19 08:02:00607Output the commits in reverse order.
Junio C Hamanob73af6c2013-12-03 22:07:11608Cannot be combined with `--walk-reflogs`.
Junio C Hamanob0e02952008-01-19 08:02:00609
610Object Traversal
611~~~~~~~~~~~~~~~~
612
Junio C Hamano076ffcc2013-02-06 05:13:21613These options are mostly targeted for packing of Git repositories.
Junio C Hamanob0e02952008-01-19 08:02:00614
615--objects::
Junio C Hamanob0e02952008-01-19 08:02:00616Print the object IDs of any object referenced by the listed
Junio C Hamanob73af6c2013-12-03 22:07:11617commits. `--objects foo ^bar` thus means ``send me
Junio C Hamanob0e02952008-01-19 08:02:00618all object IDs which I need to download if I have the commit
Junio C Hamanob73af6c2013-12-03 22:07:11619object _bar_ but not _foo_''.
Junio C Hamanob0e02952008-01-19 08:02:00620
621--objects-edge::
Junio C Hamanob73af6c2013-12-03 22:07:11622Similar to `--objects`, but also print the IDs of excluded
623commits prefixed with a ``-'' character. This is used by
624linkgit:git-pack-objects[1] to build ``thin'' pack, which records
Junio C Hamanob0e02952008-01-19 08:02:00625objects in deltified form based on objects contained in these
626excluded commits to reduce network traffic.
627
628--unpacked::
Junio C Hamanob73af6c2013-12-03 22:07:11629Only useful with `--objects`; print the object IDs that are not
Junio C Hamanob0e02952008-01-19 08:02:00630in packs.
631
Junio C Hamanoeccdd4a2012-09-10 23:28:17632--no-walk[=(sorted|unsorted)]::
Junio C Hamanoeccdd4a2012-09-10 23:28:17633Only show the given commits, but do not traverse their ancestors.
634This has no effect if a range is specified. If the argument
Junio C Hamanob73af6c2013-12-03 22:07:11635`unsorted` is given, the commits are shown in the order they were
636given on the command line. Otherwise (if `sorted` or no argument
637was given), the commits are shown in reverse chronological order
Junio C Hamanoeccdd4a2012-09-10 23:28:17638by commit time.
Junio C Hamanob0e02952008-01-19 08:02:00639
640--do-walk::
Junio C Hamanob73af6c2013-12-03 22:07:11641Overrides a previous `--no-walk`.
Junio C Hamanod2c978f2011-03-20 19:42:22642
643Commit Formatting
644~~~~~~~~~~~~~~~~~
645
646ifdef::git-rev-list[]
647Using these options, linkgit:git-rev-list[1] will act similar to the
648more specialized family of commit log tools: linkgit:git-log[1],
649linkgit:git-show[1], and linkgit:git-whatchanged[1]
650endif::git-rev-list[]
651
652include::pretty-options.txt[]
653
654--relative-date::
Junio C Hamanod2c978f2011-03-20 19:42:22655Synonym for `--date=relative`.
656
657--date=(relative|local|default|iso|rfc|short|raw)::
Junio C Hamanod2c978f2011-03-20 19:42:22658Only takes effect for dates shown in human-readable format, such
Junio C Hamanob73af6c2013-12-03 22:07:11659as when using `--pretty`. `log.date` config variable sets a default
660value for the log command's `--date` option.
Junio C Hamanod2c978f2011-03-20 19:42:22661+
662`--date=relative` shows dates relative to the current time,
Junio C Hamanob73af6c2013-12-03 22:07:11663e.g. ``2 hours ago''.
Junio C Hamanod2c978f2011-03-20 19:42:22664+
Junio C Hamanoe3acfb82013-11-12 23:22:57665`--date=local` shows timestamps in user's local time zone.
Junio C Hamanod2c978f2011-03-20 19:42:22666+
667`--date=iso` (or `--date=iso8601`) shows timestamps in ISO 8601 format.
668+
669`--date=rfc` (or `--date=rfc2822`) shows timestamps in RFC 2822
Junio C Hamanob73af6c2013-12-03 22:07:11670format, often found in email messages.
Junio C Hamanod2c978f2011-03-20 19:42:22671+
Junio C Hamanob73af6c2013-12-03 22:07:11672`--date=short` shows only the date, but not the time, in `YYYY-MM-DD` format.
Junio C Hamanod2c978f2011-03-20 19:42:22673+
Junio C Hamano076ffcc2013-02-06 05:13:21674`--date=raw` shows the date in the internal raw Git format `%s %z` format.
Junio C Hamanod2c978f2011-03-20 19:42:22675+
Junio C Hamanoe3acfb82013-11-12 23:22:57676`--date=default` shows timestamps in the original time zone
Junio C Hamanod2c978f2011-03-20 19:42:22677(either committer's or author's).
678
679ifdef::git-rev-list[]
680--header::
Junio C Hamanod2c978f2011-03-20 19:42:22681Print the contents of the commit in raw-format; each record is
682separated with a NUL character.
683endif::git-rev-list[]
684
685--parents::
Junio C Hamanod2c978f2011-03-20 19:42:22686Print also the parents of the commit (in the form "commit parent...").
687Also enables parent rewriting, see 'History Simplification' below.
688
689--children::
Junio C Hamanod2c978f2011-03-20 19:42:22690Print also the children of the commit (in the form "commit child...").
691Also enables parent rewriting, see 'History Simplification' below.
692
693ifdef::git-rev-list[]
694--timestamp::
695Print the raw commit timestamp.
696endif::git-rev-list[]
697
698--left-right::
Junio C Hamanod2c978f2011-03-20 19:42:22699Mark which side of a symmetric diff a commit is reachable from.
700Commits from the left side are prefixed with `<` and those from
701the right with `>`. If combined with `--boundary`, those
702commits are prefixed with `-`.
703+
704For example, if you have this topology:
705+
706-----------------------------------------------------------------------
707 y---b---b branch B
708 / \ /
709 / .
710 / / \
711 o---x---a---a branch A
712-----------------------------------------------------------------------
713+
714you would get an output like this:
715+
716-----------------------------------------------------------------------
717$ git rev-list --left-right --boundary --pretty=oneline A...B
718
719>bbbbbbb... 3rd on b
720>bbbbbbb... 2nd on b
721<aaaaaaa... 3rd on a
722<aaaaaaa... 2nd on a
723-yyyyyyy... 1st on b
724-xxxxxxx... 1st on a
725-----------------------------------------------------------------------
726
727--graph::
Junio C Hamanod2c978f2011-03-20 19:42:22728Draw a text-based graphical representation of the commit history
729on the left hand side of the output. This may cause extra lines
730to be printed in between commits, in order for the graph history
731to be drawn properly.
732+
733This enables parent rewriting, see 'History Simplification' below.
734+
Junio C Hamanob73af6c2013-12-03 22:07:11735This implies the `--topo-order` option by default, but the
736`--date-order` option may also be specified.
Junio C Hamanod2c978f2011-03-20 19:42:22737
738ifdef::git-rev-list[]
739--count::
740Print a number stating how many commits would have been
741listed, and suppress all other output. When used together
Junio C Hamanob73af6c2013-12-03 22:07:11742with `--left-right`, instead print the counts for left and
Junio C Hamanob77f8192011-05-05 01:30:38743right commits, separated by a tab. When used together with
Junio C Hamanob73af6c2013-12-03 22:07:11744`--cherry-mark`, omit patch equivalent commits from these
Junio C Hamanob77f8192011-05-05 01:30:38745counts and print the count for equivalent commits separated
746by a tab.
Junio C Hamanod2c978f2011-03-20 19:42:22747endif::git-rev-list[]
748
Junio C Hamanod2c978f2011-03-20 19:42:22749ifndef::git-rev-list[]
750Diff Formatting
751~~~~~~~~~~~~~~~
752
Junio C Hamanob73af6c2013-12-03 22:07:11753Listed below are options that control the formatting of diff output.
Junio C Hamanod2c978f2011-03-20 19:42:22754Some of them are specific to linkgit:git-rev-list[1], however other diff
755options may be given. See linkgit:git-diff-files[1] for more options.
756
757-c::
Junio C Hamanod2c978f2011-03-20 19:42:22758With this option, diff output for a merge commit
759shows the differences from each of the parents to the merge result
760simultaneously instead of showing pairwise diff between a parent
761and the result one at a time. Furthermore, it lists only files
762which were modified from all parents.
763
764--cc::
Junio C Hamanob73af6c2013-12-03 22:07:11765This flag implies the `-c` option and further compresses the
Junio C Hamanod2c978f2011-03-20 19:42:22766patch output by omitting uninteresting hunks whose contents in
767the parents have only two variants and the merge result picks
768one of them without modification.
769
770-m::
Junio C Hamanod2c978f2011-03-20 19:42:22771This flag makes the merge commits show the full diff like
772regular commits; for each merge parent, a separate log entry
773and diff is generated. An exception is that only diff against
Junio C Hamanob73af6c2013-12-03 22:07:11774the first parent is shown when `--first-parent` option is given;
Junio C Hamanod2c978f2011-03-20 19:42:22775in that case, the output represents the changes the merge
776brought _into_ the then-current branch.
777
778-r::
Junio C Hamanod2c978f2011-03-20 19:42:22779Show recursive diffs.
780
781-t::
Junio C Hamanob73af6c2013-12-03 22:07:11782Show the tree objects in the diff output. This implies `-r`.
Junio C Hamanod2c978f2011-03-20 19:42:22783endif::git-rev-list[]