Documentation / rev-list-options.txton commit rev-list --children (72276a3)
   1Commit Formatting
   2~~~~~~~~~~~~~~~~~
   3
   4ifdef::git-rev-list[]
   5Using these options, linkgit:git-rev-list[1] will act similar to the
   6more specialized family of commit log tools: linkgit:git-log[1],
   7linkgit:git-show[1], and linkgit:git-whatchanged[1]
   8endif::git-rev-list[]
   9
  10include::pretty-options.txt[]
  11
  12--relative-date::
  13
  14        Synonym for `--date=relative`.
  15
  16--date={relative,local,default,iso,rfc}::
  17
  18        Only takes effect for dates shown in human-readable format, such
  19        as when using "--pretty".
  20+
  21`--date=relative` shows dates relative to the current time,
  22e.g. "2 hours ago".
  23+
  24`--date=local` shows timestamps in user's local timezone.
  25+
  26`--date=iso` (or `--date=iso8601`) shows timestamps in ISO 8601 format.
  27+
  28`--date=rfc` (or `--date=rfc2822`) shows timestamps in RFC 2822
  29format, often found in E-mail messages.
  30+
  31`--date=short` shows only date but not time, in `YYYY-MM-DD` format.
  32+
  33`--date=default` shows timestamps in the original timezone
  34(either committer's or author's).
  35
  36--header::
  37
  38        Print the contents of the commit in raw-format; each record is
  39        separated with a NUL character.
  40
  41--parents::
  42
  43        Print the parents of the commit.
  44
  45--children::
  46
  47        Print the children of the commit.
  48
  49--timestamp::
  50        Print the raw commit timestamp.
  51
  52--left-right::
  53
  54        Mark which side of a symmetric diff a commit is reachable from.
  55        Commits from the left side are prefixed with `<` and those from
  56        the right with `>`.  If combined with `--boundary`, those
  57        commits are prefixed with `-`.
  58+
  59For example, if you have this topology:
  60+
  61-----------------------------------------------------------------------
  62             y---b---b  branch B
  63            / \ /
  64           /   .
  65          /   / \
  66         o---x---a---a  branch A
  67-----------------------------------------------------------------------
  68+
  69you would get an output line this:
  70+
  71-----------------------------------------------------------------------
  72        $ git rev-list --left-right --boundary --pretty=oneline A...B
  73
  74        >bbbbbbb... 3rd on b
  75        >bbbbbbb... 2nd on b
  76        <aaaaaaa... 3rd on a
  77        <aaaaaaa... 2nd on a
  78        -yyyyyyy... 1st on b
  79        -xxxxxxx... 1st on a
  80-----------------------------------------------------------------------
  81
  82Diff Formatting
  83~~~~~~~~~~~~~~~
  84
  85Below are listed options that control the formatting of diff output.
  86Some of them are specific to linkgit:git-rev-list[1], however other diff
  87options may be given. See linkgit:git-diff-files[1] for more options.
  88
  89-c::
  90
  91        This flag changes the way a merge commit is displayed.  It shows
  92        the differences from each of the parents to the merge result
  93        simultaneously instead of showing pairwise diff between a parent
  94        and the result one at a time. Furthermore, it lists only files
  95        which were modified from all parents.
  96
  97--cc::
  98
  99        This flag implies the '-c' options and further compresses the
 100        patch output by omitting hunks that show differences from only
 101        one parent, or show the same change from all but one parent for
 102        an Octopus merge.
 103
 104-r::
 105
 106        Show recursive diffs.
 107
 108-t::
 109
 110        Show the tree objects in the diff output. This implies '-r'.
 111
 112Commit Limiting
 113~~~~~~~~~~~~~~~
 114
 115Besides specifying a range of commits that should be listed using the
 116special notations explained in the description, additional commit
 117limiting may be applied.
 118
 119--
 120
 121-n 'number', --max-count='number'::
 122
 123        Limit the number of commits output.
 124
 125--skip='number'::
 126
 127        Skip 'number' commits before starting to show the commit output.
 128
 129--since='date', --after='date'::
 130
 131        Show commits more recent than a specific date.
 132
 133--until='date', --before='date'::
 134
 135        Show commits older than a specific date.
 136
 137ifdef::git-rev-list[]
 138--max-age='timestamp', --min-age='timestamp'::
 139
 140        Limit the commits output to specified time range.
 141endif::git-rev-list[]
 142
 143--author='pattern', --committer='pattern'::
 144
 145        Limit the commits output to ones with author/committer
 146        header lines that match the specified pattern (regular expression).
 147
 148--grep='pattern'::
 149
 150        Limit the commits output to ones with log message that
 151        matches the specified pattern (regular expression).
 152
 153-i, --regexp-ignore-case::
 154
 155        Match the regexp limiting patterns without regard to letters case.
 156
 157-E, --extended-regexp::
 158
 159        Consider the limiting patterns to be extended regular expressions
 160        instead of the default basic regular expressions.
 161
 162-F, --fixed-strings::
 163
 164        Consider the limiting patterns to be fixed strings (don't interpret
 165        pattern as a regular expression).
 166
 167--remove-empty::
 168
 169        Stop when a given path disappears from the tree.
 170
 171--full-history::
 172
 173        Show also parts of history irrelevant to current state of a given
 174        path. This turns off history simplification, which removed merges
 175        which didn't change anything at all at some child. It will still actually
 176        simplify away merges that didn't change anything at all into either
 177        child.
 178
 179--no-merges::
 180
 181        Do not print commits with more than one parent.
 182
 183--first-parent::
 184        Follow only the first parent commit upon seeing a merge
 185        commit.  This option can give a better overview when
 186        viewing the evolution of a particular topic branch,
 187        because merges into a topic branch tend to be only about
 188        adjusting to updated upstream from time to time, and
 189        this option allows you to ignore the individual commits
 190        brought in to your history by such a merge.
 191
 192--not::
 193
 194        Reverses the meaning of the '{caret}' prefix (or lack thereof)
 195        for all following revision specifiers, up to the next '--not'.
 196
 197--all::
 198
 199        Pretend as if all the refs in `$GIT_DIR/refs/` are listed on the
 200        command line as '<commit>'.
 201
 202--stdin::
 203
 204        In addition to the '<commit>' listed on the command
 205        line, read them from the standard input.
 206
 207--quiet::
 208
 209        Don't print anything to standard output.  This form
 210        is primarily meant to allow the caller to
 211        test the exit status to see if a range of objects is fully
 212        connected (or not).  It is faster than redirecting stdout
 213        to /dev/null as the output does not have to be formatted.
 214
 215--cherry-pick::
 216
 217        Omit any commit that introduces the same change as
 218        another commit on the "other side" when the set of
 219        commits are limited with symmetric difference.
 220+
 221For example, if you have two branches, `A` and `B`, a usual way
 222to list all commits on only one side of them is with
 223`--left-right`, like the example above in the description of
 224that option.  It however shows the commits that were cherry-picked
 225from the other branch (for example, "3rd on b" may be cherry-picked
 226from branch A).  With this option, such pairs of commits are
 227excluded from the output.
 228
 229-g, --walk-reflogs::
 230
 231        Instead of walking the commit ancestry chain, walk
 232        reflog entries from the most recent one to older ones.
 233        When this option is used you cannot specify commits to
 234        exclude (that is, '{caret}commit', 'commit1..commit2',
 235        nor 'commit1...commit2' notations cannot be used).
 236+
 237With '\--pretty' format other than oneline (for obvious reasons),
 238this causes the output to have two extra lines of information
 239taken from the reflog.  By default, 'commit@\{Nth}' notation is
 240used in the output.  When the starting commit is specified as
 241'commit@{now}', output also uses 'commit@\{timestamp}' notation
 242instead.  Under '\--pretty=oneline', the commit message is
 243prefixed with this information on the same line.
 244
 245Cannot be combined with '\--reverse'.
 246See also linkgit:git-reflog[1].
 247
 248--merge::
 249
 250        After a failed merge, show refs that touch files having a
 251        conflict and don't exist on all heads to merge.
 252
 253--boundary::
 254
 255        Output uninteresting commits at the boundary, which are usually
 256        not shown.
 257
 258--dense, --sparse::
 259
 260When optional paths are given, the default behaviour ('--dense') is to
 261only output commits that changes at least one of them, and also ignore
 262merges that do not touch the given paths.
 263
 264Use the '--sparse' flag to makes the command output all eligible commits
 265(still subject to count and age limitation), but apply merge
 266simplification nevertheless.
 267
 268ifdef::git-rev-list[]
 269--bisect::
 270
 271Limit output to the one commit object which is roughly halfway between
 272the included and excluded commits. Thus, if
 273
 274-----------------------------------------------------------------------
 275        $ git-rev-list --bisect foo ^bar ^baz
 276-----------------------------------------------------------------------
 277
 278outputs 'midpoint', the output of the two commands
 279
 280-----------------------------------------------------------------------
 281        $ git-rev-list foo ^midpoint
 282        $ git-rev-list midpoint ^bar ^baz
 283-----------------------------------------------------------------------
 284
 285would be of roughly the same length.  Finding the change which
 286introduces a regression is thus reduced to a binary search: repeatedly
 287generate and test new 'midpoint's until the commit chain is of length
 288one.
 289
 290--bisect-vars::
 291
 292This calculates the same as `--bisect`, but outputs text ready
 293to be eval'ed by the shell. These lines will assign the name of
 294the midpoint revision to the variable `bisect_rev`, and the
 295expected number of commits to be tested after `bisect_rev` is
 296tested to `bisect_nr`, the expected number of commits to be
 297tested if `bisect_rev` turns out to be good to `bisect_good`,
 298the expected number of commits to be tested if `bisect_rev`
 299turns out to be bad to `bisect_bad`, and the number of commits
 300we are bisecting right now to `bisect_all`.
 301
 302--bisect-all::
 303
 304This outputs all the commit objects between the included and excluded
 305commits, ordered by their distance to the included and excluded
 306commits. The farthest from them is displayed first. (This is the only
 307one displayed by `--bisect`.)
 308
 309This is useful because it makes it easy to choose a good commit to
 310test when you want to avoid to test some of them for some reason (they
 311may not compile for example).
 312
 313This option can be used along with `--bisect-vars`, in this case,
 314after all the sorted commit objects, there will be the same text as if
 315`--bisect-vars` had been used alone.
 316endif::git-rev-list[]
 317
 318--
 319
 320Commit Ordering
 321~~~~~~~~~~~~~~~
 322
 323By default, the commits are shown in reverse chronological order.
 324
 325--topo-order::
 326
 327        This option makes them appear in topological order (i.e.
 328        descendant commits are shown before their parents).
 329
 330--date-order::
 331
 332        This option is similar to '--topo-order' in the sense that no
 333        parent comes before all of its children, but otherwise things
 334        are still ordered in the commit timestamp order.
 335
 336--reverse::
 337
 338        Output the commits in reverse order.
 339        Cannot be combined with '\--walk-reflogs'.
 340
 341Object Traversal
 342~~~~~~~~~~~~~~~~
 343
 344These options are mostly targeted for packing of git repositories.
 345
 346--objects::
 347
 348        Print the object IDs of any object referenced by the listed
 349        commits.  '--objects foo ^bar' thus means "send me
 350        all object IDs which I need to download if I have the commit
 351        object 'bar', but not 'foo'".
 352
 353--objects-edge::
 354
 355        Similar to '--objects', but also print the IDs of excluded
 356        commits prefixed with a "-" character.  This is used by
 357        linkgit:git-pack-objects[1] to build "thin" pack, which records
 358        objects in deltified form based on objects contained in these
 359        excluded commits to reduce network traffic.
 360
 361--unpacked::
 362
 363        Only useful with '--objects'; print the object IDs that are not
 364        in packs.
 365
 366--no-walk::
 367
 368        Only show the given revs, but do not traverse their ancestors.
 369
 370--do-walk::
 371
 372        Overrides a previous --no-walk.