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