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