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