Documentation / rev-list-options.txton commit Documentation/rev-list-options.txt: fix mark-up (4528aa1)
   1Commit Limiting
   2~~~~~~~~~~~~~~~
   3
   4Besides specifying a range of commits that should be listed using the
   5special notations explained in the description, additional commit
   6limiting 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`.
  15
  16--
  17
  18-<number>::
  19-n <number>::
  20--max-count=<number>::
  21        Limit the number of commits to output.
  22
  23--skip=<number>::
  24        Skip 'number' commits before starting to show the commit output.
  25
  26--since=<date>::
  27--after=<date>::
  28        Show commits more recent than a specific date.
  29
  30--until=<date>::
  31--before=<date>::
  32        Show commits older than a specific date.
  33
  34ifdef::git-rev-list[]
  35--max-age=<timestamp>::
  36--min-age=<timestamp>::
  37        Limit the commits output to specified time range.
  38endif::git-rev-list[]
  39
  40--author=<pattern>::
  41--committer=<pattern>::
  42        Limit the commits output to ones with author/committer
  43        header lines that match the specified pattern (regular
  44        expression).  With more than one `--author=<pattern>`,
  45        commits whose author matches any of the given patterns are
  46        chosen (similarly for multiple `--committer=<pattern>`).
  47
  48--grep-reflog=<pattern>::
  49        Limit the commits output to ones with reflog entries that
  50        match the specified pattern (regular expression). With
  51        more than one `--grep-reflog`, commits whose reflog message
  52        matches any of the given patterns are chosen.  It is an
  53        error to use this option unless `--walk-reflogs` is in use.
  54
  55--grep=<pattern>::
  56        Limit the commits output to ones with log message that
  57        matches the specified pattern (regular expression).  With
  58        more than one `--grep=<pattern>`, commits whose message
  59        matches any of the given patterns are chosen (but see
  60        `--all-match`).
  61+
  62When `--show-notes` is in effect, the message from the notes as
  63if it is part of the log message.
  64
  65--all-match::
  66        Limit the commits output to ones that match all given `--grep`,
  67        instead of ones that match at least one.
  68
  69-i::
  70--regexp-ignore-case::
  71        Match the regexp limiting patterns without regard to letters case.
  72
  73--basic-regexp::
  74        Consider the limiting patterns to be basic regular expressions;
  75        this is the default.
  76
  77-E::
  78--extended-regexp::
  79        Consider the limiting patterns to be extended regular expressions
  80        instead of the default basic regular expressions.
  81
  82-F::
  83--fixed-strings::
  84        Consider the limiting patterns to be fixed strings (don't interpret
  85        pattern as a regular expression).
  86
  87--perl-regexp::
  88        Consider the limiting patterns to be Perl-compatible regexp.
  89        Requires libpcre to be compiled in.
  90
  91--remove-empty::
  92        Stop when a given path disappears from the tree.
  93
  94--merges::
  95        Print only merge commits. This is exactly the same as `--min-parents=2`.
  96
  97--no-merges::
  98        Do not print commits with more than one parent. This is
  99        exactly the same as `--max-parents=1`.
 100
 101--min-parents=<number>::
 102--max-parents=<number>::
 103--no-min-parents::
 104--no-max-parents::
 105        Show only commits which have at least (or at most) that many parent
 106        commits. In particular, `--max-parents=1` is the same as `--no-merges`,
 107        `--min-parents=2` is the same as `--merges`.  `--max-parents=0`
 108        gives all root commits and `--min-parents=3` all octopus merges.
 109+
 110`--no-min-parents` and `--no-max-parents` reset these limits (to no limit)
 111again.  Equivalent forms are `--min-parents=0` (any commit has 0 or more
 112parents) and `--max-parents=-1` (negative numbers denote no upper limit).
 113
 114--first-parent::
 115        Follow only the first parent commit upon seeing a merge
 116        commit.  This option can give a better overview when
 117        viewing the evolution of a particular topic branch,
 118        because merges into a topic branch tend to be only about
 119        adjusting to updated upstream from time to time, and
 120        this option allows you to ignore the individual commits
 121        brought in to your history by such a merge.
 122
 123--not::
 124        Reverses the meaning of the '{caret}' prefix (or lack thereof)
 125        for all following revision specifiers, up to the next `--not`.
 126
 127--all::
 128        Pretend as if all the refs in `refs/` are listed on the
 129        command line as '<commit>'.
 130
 131--branches[=<pattern>]::
 132        Pretend as if all the refs in `refs/heads` are listed
 133        on the command line as '<commit>'. If '<pattern>' is given, limit
 134        branches to ones matching given shell glob. If pattern lacks '?',
 135        '{asterisk}', or '[', '/{asterisk}' at the end is implied.
 136
 137--tags[=<pattern>]::
 138        Pretend as if all the refs in `refs/tags` are listed
 139        on the command line as '<commit>'. If '<pattern>' is given, limit
 140        tags to ones matching given shell glob. If pattern lacks '?', '{asterisk}',
 141        or '[', '/{asterisk}' at the end is implied.
 142
 143--remotes[=<pattern>]::
 144        Pretend as if all the refs in `refs/remotes` are listed
 145        on the command line as '<commit>'. If '<pattern>' is given, limit
 146        remote-tracking branches to ones matching given shell glob.
 147        If pattern lacks '?', '{asterisk}', or '[', '/{asterisk}' at the end is implied.
 148
 149--glob=<glob-pattern>::
 150        Pretend as if all the refs matching shell glob '<glob-pattern>'
 151        are listed on the command line as '<commit>'. Leading 'refs/',
 152        is automatically prepended if missing. If pattern lacks '?', '{asterisk}',
 153        or '[', '/{asterisk}' at the end is implied.
 154
 155--ignore-missing::
 156        Upon seeing an invalid object name in the input, pretend as if
 157        the bad input was not given.
 158
 159ifndef::git-rev-list[]
 160--bisect::
 161        Pretend as if the bad bisection ref `refs/bisect/bad`
 162        was listed and as if it was followed by `--not` and the good
 163        bisection refs `refs/bisect/good-*` on the command
 164        line.
 165endif::git-rev-list[]
 166
 167--stdin::
 168        In addition to the '<commit>' listed on the command
 169        line, read them from the standard input. If a '--' separator is
 170        seen, stop reading commits and start reading paths to limit the
 171        result.
 172
 173ifdef::git-rev-list[]
 174--quiet::
 175        Don't print anything to standard output.  This form
 176        is primarily meant to allow the caller to
 177        test the exit status to see if a range of objects is fully
 178        connected (or not).  It is faster than redirecting stdout
 179        to `/dev/null` as the output does not have to be formatted.
 180endif::git-rev-list[]
 181
 182--cherry-mark::
 183        Like `--cherry-pick` (see below) but mark equivalent commits
 184        with `=` rather than omitting them, and inequivalent ones with `+`.
 185
 186--cherry-pick::
 187        Omit any commit that introduces the same change as
 188        another commit on the ``other side'' when the set of
 189        commits are limited with symmetric difference.
 190+
 191For example, if you have two branches, `A` and `B`, a usual way
 192to list all commits on only one side of them is with
 193`--left-right` (see the example below in the description of
 194the `--left-right` option).  It however shows the commits that were cherry-picked
 195from the other branch (for example, ``3rd on b'' may be cherry-picked
 196from branch A).  With this option, such pairs of commits are
 197excluded from the output.
 198
 199--left-only::
 200--right-only::
 201        List only commits on the respective side of a symmetric range,
 202        i.e. only those which would be marked `<` resp. `>` by
 203        `--left-right`.
 204+
 205For example, `--cherry-pick --right-only A...B` omits those
 206commits from `B` which are in `A` or are patch-equivalent to a commit in
 207`A`. In other words, this lists the `+` commits from `git cherry A B`.
 208More precisely, `--cherry-pick --right-only --no-merges` gives the exact
 209list.
 210
 211--cherry::
 212        A synonym for `--right-only --cherry-mark --no-merges`; useful to
 213        limit the output to the commits on our side and mark those that
 214        have been applied to the other side of a forked history with
 215        `git log --cherry upstream...mybranch`, similar to
 216        `git cherry upstream mybranch`.
 217
 218-g::
 219--walk-reflogs::
 220        Instead of walking the commit ancestry chain, walk
 221        reflog entries from the most recent one to older ones.
 222        When this option is used you cannot specify commits to
 223        exclude (that is, '{caret}commit', 'commit1..commit2',
 224        nor 'commit1\...commit2' notations cannot be used).
 225+
 226With `--pretty` format other than `oneline` (for obvious reasons),
 227this causes the output to have two extra lines of information
 228taken from the reflog.  By default, 'commit@\{Nth}' notation is
 229used in the output.  When the starting commit is specified as
 230'commit@\{now}', output also uses 'commit@\{timestamp}' notation
 231instead.  Under `--pretty=oneline`, the commit message is
 232prefixed with this information on the same line.
 233This option cannot be combined with `--reverse`.
 234See also linkgit:git-reflog[1].
 235
 236--merge::
 237        After a failed merge, show refs that touch files having a
 238        conflict and don't exist on all heads to merge.
 239
 240--boundary::
 241        Output excluded boundary commits. Boundary commits are
 242        prefixed with `-`.
 243
 244--
 245
 246History Simplification
 247~~~~~~~~~~~~~~~~~~~~~~
 248
 249Sometimes you are only interested in parts of the history, for example the
 250commits modifying a particular <path>. But there are two parts of
 251'History Simplification', one part is selecting the commits and the other
 252is how to do it, as there are various strategies to simplify the history.
 253
 254The following options select the commits to be shown:
 255
 256<paths>::
 257        Commits modifying the given <paths> are selected.
 258
 259--simplify-by-decoration::
 260        Commits that are referred by some branch or tag are selected.
 261
 262Note that extra commits can be shown to give a meaningful history.
 263
 264The following options affect the way the simplification is performed:
 265
 266Default mode::
 267        Simplifies the history to the simplest history explaining the
 268        final state of the tree. Simplest because it prunes some side
 269        branches if the end result is the same (i.e. merging branches
 270        with the same content)
 271
 272--full-history::
 273        Same as the default mode, but does not prune some history.
 274
 275--dense::
 276        Only the selected commits are shown, plus some to have a
 277        meaningful history.
 278
 279--sparse::
 280        All commits in the simplified history are shown.
 281
 282--simplify-merges::
 283        Additional option to `--full-history` to remove some needless
 284        merges from the resulting history, as there are no selected
 285        commits contributing to this merge.
 286
 287--ancestry-path::
 288        When given a range of commits to display (e.g. 'commit1..commit2'
 289        or 'commit2 {caret}commit1'), only display commits that exist
 290        directly on the ancestry chain between the 'commit1' and
 291        'commit2', i.e. commits that are both descendants of 'commit1',
 292        and ancestors of 'commit2'.
 293
 294A more detailed explanation follows.
 295
 296Suppose you specified `foo` as the <paths>.  We shall call commits
 297that modify `foo` !TREESAME, and the rest TREESAME.  (In a diff
 298filtered for `foo`, they look different and equal, respectively.)
 299
 300In the following, we will always refer to the same example history to
 301illustrate the differences between simplification settings.  We assume
 302that you are filtering for a file `foo` in this commit graph:
 303-----------------------------------------------------------------------
 304          .-A---M---N---O---P---Q
 305         /     /   /   /   /   /
 306        I     B   C   D   E   Y
 307         \   /   /   /   /   /
 308          `-------------'   X
 309-----------------------------------------------------------------------
 310The horizontal line of history A---Q is taken to be the first parent of
 311each merge.  The commits are:
 312
 313* `I` is the initial commit, in which `foo` exists with contents
 314  ``asdf'', and a file `quux` exists with contents ``quux''. Initial
 315  commits are compared to an empty tree, so `I` is !TREESAME.
 316
 317* In `A`, `foo` contains just ``foo''.
 318
 319* `B` contains the same change as `A`.  Its merge `M` is trivial and
 320  hence TREESAME to all parents.
 321
 322* `C` does not change `foo`, but its merge `N` changes it to ``foobar'',
 323  so it is not TREESAME to any parent.
 324
 325* `D` sets `foo` to ``baz''. Its merge `O` combines the strings from
 326  `N` and `D` to ``foobarbaz''; i.e., it is not TREESAME to any parent.
 327
 328* `E` changes `quux` to ``xyzzy'', and its merge `P` combines the
 329  strings to ``quux xyzzy''. `P` is TREESAME to `O`, but not to `E`.
 330
 331* `X` is an independent root commit that added a new file `side`, and `Y`
 332  modified it. `Y` is TREESAME to `X`. Its merge `Q` added `side` to `P`, and
 333  `Q` is TREESAME to `P`, but not to `Y`.
 334
 335`rev-list` walks backwards through history, including or excluding
 336commits based on whether `--full-history` and/or parent rewriting
 337(via `--parents` or `--children`) are used. The following settings
 338are available.
 339
 340Default mode::
 341        Commits are included if they are not TREESAME to any parent
 342        (though this can be changed, see `--sparse` below).  If the
 343        commit was a merge, and it was TREESAME to one parent, follow
 344        only that parent.  (Even if there are several TREESAME
 345        parents, follow only one of them.)  Otherwise, follow all
 346        parents.
 347+
 348This results in:
 349+
 350-----------------------------------------------------------------------
 351          .-A---N---O
 352         /     /   /
 353        I---------D
 354-----------------------------------------------------------------------
 355+
 356Note how the rule to only follow the TREESAME parent, if one is
 357available, removed `B` from consideration entirely.  `C` was
 358considered via `N`, but is TREESAME.  Root commits are compared to an
 359empty tree, so `I` is !TREESAME.
 360+
 361Parent/child relations are only visible with `--parents`, but that does
 362not affect the commits selected in default mode, so we have shown the
 363parent lines.
 364
 365--full-history without parent rewriting::
 366        This mode differs from the default in one point: always follow
 367        all parents of a merge, even if it is TREESAME to one of them.
 368        Even if more than one side of the merge has commits that are
 369        included, this does not imply that the merge itself is!  In
 370        the example, we get
 371+
 372-----------------------------------------------------------------------
 373        I  A  B  N  D  O  P  Q
 374-----------------------------------------------------------------------
 375+
 376`M` was excluded because it is TREESAME to both parents.  `E`,
 377`C` and `B` were all walked, but only `B` was !TREESAME, so the others
 378do not appear.
 379+
 380Note that without parent rewriting, it is not really possible to talk
 381about the parent/child relationships between the commits, so we show
 382them disconnected.
 383
 384--full-history with parent rewriting::
 385        Ordinary commits are only included if they are !TREESAME
 386        (though this can be changed, see `--sparse` below).
 387+
 388Merges are always included.  However, their parent list is rewritten:
 389Along each parent, prune away commits that are not included
 390themselves.  This results in
 391+
 392-----------------------------------------------------------------------
 393          .-A---M---N---O---P---Q
 394         /     /   /   /   /
 395        I     B   /   D   /
 396         \   /   /   /   /
 397          `-------------'
 398-----------------------------------------------------------------------
 399+
 400Compare to `--full-history` without rewriting above.  Note that `E`
 401was pruned away because it is TREESAME, but the parent list of P was
 402rewritten to contain `E`'s parent `I`.  The same happened for `C` and
 403`N`, and `X`, `Y` and `Q`.
 404
 405In addition to the above settings, you can change whether TREESAME
 406affects inclusion:
 407
 408--dense::
 409        Commits that are walked are included if they are not TREESAME
 410        to any parent.
 411
 412--sparse::
 413        All commits that are walked are included.
 414+
 415Note that without `--full-history`, this still simplifies merges: if
 416one of the parents is TREESAME, we follow only that one, so the other
 417sides of the merge are never walked.
 418
 419--simplify-merges::
 420        First, build a history graph in the same way that
 421        `--full-history` with parent rewriting does (see above).
 422+
 423Then simplify each commit `C` to its replacement `C'` in the final
 424history according to the following rules:
 425+
 426--
 427* Set `C'` to `C`.
 428+
 429* Replace each parent `P` of `C'` with its simplification `P'`.  In
 430  the process, drop parents that are ancestors of other parents or that are
 431  root commits TREESAME to an empty tree, and remove duplicates, but take care
 432  to never drop all parents that we are TREESAME to.
 433+
 434* If after this parent rewriting, `C'` is a root or merge commit (has
 435  zero or >1 parents), a boundary commit, or !TREESAME, it remains.
 436  Otherwise, it is replaced with its only parent.
 437--
 438+
 439The effect of this is best shown by way of comparing to
 440`--full-history` with parent rewriting.  The example turns into:
 441+
 442-----------------------------------------------------------------------
 443          .-A---M---N---O
 444         /     /       /
 445        I     B       D
 446         \   /       /
 447          `---------'
 448-----------------------------------------------------------------------
 449+
 450Note the major differences in `N`, `P` and `Q` over `--full-history`:
 451+
 452--
 453* `N`'s parent list had `I` removed, because it is an ancestor of the
 454  other parent `M`.  Still, `N` remained because it is !TREESAME.
 455+
 456* `P`'s parent list similarly had `I` removed.  `P` was then
 457  removed completely, because it had one parent and is TREESAME.
 458+
 459* `Q`'s parent list had `Y` simplified to `X`. `X` was then removed, because it
 460  was a TREESAME root. `Q` was then removed completely, because it had one
 461  parent and is TREESAME.
 462--
 463
 464Finally, there is a fifth simplification mode available:
 465
 466--ancestry-path::
 467        Limit the displayed commits to those directly on the ancestry
 468        chain between the ``from'' and ``to'' commits in the given commit
 469        range. I.e. only display commits that are ancestor of the ``to''
 470        commit, and descendants of the ``from'' commit.
 471+
 472As an example use case, consider the following commit history:
 473+
 474-----------------------------------------------------------------------
 475            D---E-------F
 476           /     \       \
 477          B---C---G---H---I---J
 478         /                     \
 479        A-------K---------------L--M
 480-----------------------------------------------------------------------
 481+
 482A regular 'D..M' computes the set of commits that are ancestors of `M`,
 483but excludes the ones that are ancestors of `D`. This is useful to see
 484what happened to the history leading to `M` since `D`, in the sense
 485that ``what does `M` have that did not exist in `D`''. The result in this
 486example would be all the commits, except `A` and `B` (and `D` itself,
 487of course).
 488+
 489When we want to find out what commits in `M` are contaminated with the
 490bug introduced by `D` and need fixing, however, we might want to view
 491only the subset of 'D..M' that are actually descendants of `D`, i.e.
 492excluding `C` and `K`. This is exactly what the `--ancestry-path`
 493option does. Applied to the 'D..M' range, it results in:
 494+
 495-----------------------------------------------------------------------
 496                E-------F
 497                 \       \
 498                  G---H---I---J
 499                               \
 500                                L--M
 501-----------------------------------------------------------------------
 502
 503The `--simplify-by-decoration` option allows you to view only the
 504big picture of the topology of the history, by omitting commits
 505that are not referenced by tags.  Commits are marked as !TREESAME
 506(in other words, kept after history simplification rules described
 507above) if (1) they are referenced by tags, or (2) they change the
 508contents of the paths given on the command line.  All other
 509commits are marked as TREESAME (subject to be simplified away).
 510
 511ifdef::git-rev-list[]
 512Bisection Helpers
 513~~~~~~~~~~~~~~~~~
 514
 515--bisect::
 516        Limit output to the one commit object which is roughly halfway between
 517        included and excluded commits. Note that the bad bisection ref
 518        `refs/bisect/bad` is added to the included commits (if it
 519        exists) and the good bisection refs `refs/bisect/good-*` are
 520        added to the excluded commits (if they exist). Thus, supposing there
 521        are no refs in `refs/bisect/`, if
 522+
 523-----------------------------------------------------------------------
 524        $ git rev-list --bisect foo ^bar ^baz
 525-----------------------------------------------------------------------
 526+
 527outputs 'midpoint', the output of the two commands
 528+
 529-----------------------------------------------------------------------
 530        $ git rev-list foo ^midpoint
 531        $ git rev-list midpoint ^bar ^baz
 532-----------------------------------------------------------------------
 533+
 534would be of roughly the same length.  Finding the change which
 535introduces a regression is thus reduced to a binary search: repeatedly
 536generate and test new 'midpoint's until the commit chain is of length
 537one.
 538
 539--bisect-vars::
 540        This calculates the same as `--bisect`, except that refs in
 541        `refs/bisect/` are not used, and except that this outputs
 542        text ready to be eval'ed by the shell. These lines will assign the
 543        name of the midpoint revision to the variable `bisect_rev`, and the
 544        expected number of commits to be tested after `bisect_rev` is tested
 545        to `bisect_nr`, the expected number of commits to be tested if
 546        `bisect_rev` turns out to be good to `bisect_good`, the expected
 547        number of commits to be tested if `bisect_rev` turns out to be bad to
 548        `bisect_bad`, and the number of commits we are bisecting right now to
 549        `bisect_all`.
 550
 551--bisect-all::
 552        This outputs all the commit objects between the included and excluded
 553        commits, ordered by their distance to the included and excluded
 554        commits. Refs in `refs/bisect/` are not used. The farthest
 555        from them is displayed first. (This is the only one displayed by
 556        `--bisect`.)
 557+
 558This is useful because it makes it easy to choose a good commit to
 559test when you want to avoid to test some of them for some reason (they
 560may not compile for example).
 561+
 562This option can be used along with `--bisect-vars`, in this case,
 563after all the sorted commit objects, there will be the same text as if
 564`--bisect-vars` had been used alone.
 565endif::git-rev-list[]
 566
 567
 568Commit Ordering
 569~~~~~~~~~~~~~~~
 570
 571By default, the commits are shown in reverse chronological order.
 572
 573--date-order::
 574        Show no parents before all of its children are shown, but
 575        otherwise show commits in the commit timestamp order.
 576
 577--author-date-order::
 578        Show no parents before all of its children are shown, but
 579        otherwise show commits in the author timestamp order.
 580
 581--topo-order::
 582        Show no parents before all of its children are shown, and
 583        avoid showing commits on multiple lines of history
 584        intermixed.
 585+
 586For example, in a commit history like this:
 587+
 588----------------------------------------------------------------
 589
 590    ---1----2----4----7
 591        \              \
 592         3----5----6----8---
 593
 594----------------------------------------------------------------
 595+
 596where the numbers denote the order of commit timestamps, `git
 597rev-list` and friends with `--date-order` show the commits in the
 598timestamp order: 8 7 6 5 4 3 2 1.
 599+
 600With `--topo-order`, they would show 8 6 5 3 7 4 2 1 (or 8 7 4 2 6 5
 6013 1); some older commits are shown before newer ones in order to
 602avoid showing the commits from two parallel development track mixed
 603together.
 604
 605--reverse::
 606        Output the commits in reverse order.
 607        Cannot be combined with `--walk-reflogs`.
 608
 609Object Traversal
 610~~~~~~~~~~~~~~~~
 611
 612These options are mostly targeted for packing of Git repositories.
 613
 614--objects::
 615        Print the object IDs of any object referenced by the listed
 616        commits.  `--objects foo ^bar` thus means ``send me
 617        all object IDs which I need to download if I have the commit
 618        object _bar_ but not _foo_''.
 619
 620--objects-edge::
 621        Similar to `--objects`, but also print the IDs of excluded
 622        commits prefixed with a ``-'' character.  This is used by
 623        linkgit:git-pack-objects[1] to build ``thin'' pack, which records
 624        objects in deltified form based on objects contained in these
 625        excluded commits to reduce network traffic.
 626
 627--unpacked::
 628        Only useful with `--objects`; print the object IDs that are not
 629        in packs.
 630
 631--no-walk[=(sorted|unsorted)]::
 632        Only show the given commits, but do not traverse their ancestors.
 633        This has no effect if a range is specified. If the argument
 634        `unsorted` is given, the commits are show in the order they were
 635        given on the command line. Otherwise (if `sorted` or no argument
 636        was given), the commits are show in reverse chronological order
 637        by commit time.
 638
 639--do-walk::
 640        Overrides a previous `--no-walk`.
 641
 642Commit Formatting
 643~~~~~~~~~~~~~~~~~
 644
 645ifdef::git-rev-list[]
 646Using these options, linkgit:git-rev-list[1] will act similar to the
 647more specialized family of commit log tools: linkgit:git-log[1],
 648linkgit:git-show[1], and linkgit:git-whatchanged[1]
 649endif::git-rev-list[]
 650
 651include::pretty-options.txt[]
 652
 653--relative-date::
 654        Synonym for `--date=relative`.
 655
 656--date=(relative|local|default|iso|rfc|short|raw)::
 657        Only takes effect for dates shown in human-readable format, such
 658        as when using `--pretty`. `log.date` config variable sets a default
 659        value for log command's `--date` option.
 660+
 661`--date=relative` shows dates relative to the current time,
 662e.g. ``2 hours ago''.
 663+
 664`--date=local` shows timestamps in user's local timezone.
 665+
 666`--date=iso` (or `--date=iso8601`) shows timestamps in ISO 8601 format.
 667+
 668`--date=rfc` (or `--date=rfc2822`) shows timestamps in RFC 2822
 669format, often found in E-mail messages.
 670+
 671`--date=short` shows only date but not time, in `YYYY-MM-DD` format.
 672+
 673`--date=raw` shows the date in the internal raw Git format `%s %z` format.
 674+
 675`--date=default` shows timestamps in the original timezone
 676(either committer's or author's).
 677
 678ifdef::git-rev-list[]
 679--header::
 680        Print the contents of the commit in raw-format; each record is
 681        separated with a NUL character.
 682endif::git-rev-list[]
 683
 684--parents::
 685        Print also the parents of the commit (in the form "commit parent...").
 686        Also enables parent rewriting, see 'History Simplification' below.
 687
 688--children::
 689        Print also the children of the commit (in the form "commit child...").
 690        Also enables parent rewriting, see 'History Simplification' below.
 691
 692ifdef::git-rev-list[]
 693--timestamp::
 694        Print the raw commit timestamp.
 695endif::git-rev-list[]
 696
 697--left-right::
 698        Mark which side of a symmetric diff a commit is reachable from.
 699        Commits from the left side are prefixed with `<` and those from
 700        the right with `>`.  If combined with `--boundary`, those
 701        commits are prefixed with `-`.
 702+
 703For example, if you have this topology:
 704+
 705-----------------------------------------------------------------------
 706             y---b---b  branch B
 707            / \ /
 708           /   .
 709          /   / \
 710         o---x---a---a  branch A
 711-----------------------------------------------------------------------
 712+
 713you would get an output like this:
 714+
 715-----------------------------------------------------------------------
 716        $ git rev-list --left-right --boundary --pretty=oneline A...B
 717
 718        >bbbbbbb... 3rd on b
 719        >bbbbbbb... 2nd on b
 720        <aaaaaaa... 3rd on a
 721        <aaaaaaa... 2nd on a
 722        -yyyyyyy... 1st on b
 723        -xxxxxxx... 1st on a
 724-----------------------------------------------------------------------
 725
 726--graph::
 727        Draw a text-based graphical representation of the commit history
 728        on the left hand side of the output.  This may cause extra lines
 729        to be printed in between commits, in order for the graph history
 730        to be drawn properly.
 731+
 732This enables parent rewriting, see 'History Simplification' below.
 733+
 734This implies the `--topo-order` option by default, but the
 735`--date-order` option may also be specified.
 736
 737ifdef::git-rev-list[]
 738--count::
 739        Print a number stating how many commits would have been
 740        listed, and suppress all other output.  When used together
 741        with `--left-right`, instead print the counts for left and
 742        right commits, separated by a tab. When used together with
 743        `--cherry-mark`, omit patch equivalent commits from these
 744        counts and print the count for equivalent commits separated
 745        by a tab.
 746endif::git-rev-list[]
 747
 748ifndef::git-rev-list[]
 749Diff Formatting
 750~~~~~~~~~~~~~~~
 751
 752Below are listed options that control the formatting of diff output.
 753Some of them are specific to linkgit:git-rev-list[1], however other diff
 754options may be given. See linkgit:git-diff-files[1] for more options.
 755
 756-c::
 757        With this option, diff output for a merge commit
 758        shows the differences from each of the parents to the merge result
 759        simultaneously instead of showing pairwise diff between a parent
 760        and the result one at a time. Furthermore, it lists only files
 761        which were modified from all parents.
 762
 763--cc::
 764        This flag implies the `-c` option and further compresses the
 765        patch output by omitting uninteresting hunks whose contents in
 766        the parents have only two variants and the merge result picks
 767        one of them without modification.
 768
 769-m::
 770        This flag makes the merge commits show the full diff like
 771        regular commits; for each merge parent, a separate log entry
 772        and diff is generated. An exception is that only diff against
 773        the first parent is shown when `--first-parent` option is given;
 774        in that case, the output represents the changes the merge
 775        brought _into_ the then-current branch.
 776
 777-r::
 778        Show recursive diffs.
 779
 780-t::
 781        Show the tree objects in the diff output. This implies `-r`.
 782endif::git-rev-list[]