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