blob: e46788ebc581b30719e06f534202bbd977dfcfc9 [file] [log] [blame]
Junio C Hamano85151f32018-04-10 00:52:261<?xml version="1.0" encoding="UTF-8"?>
Junio C Hamano1a4e8412005-12-27 08:17:232<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
5<head>
Junio C Hamano9d971152012-12-19 00:43:116<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
Junio C Hamano98c882d2020-08-13 22:06:577<meta name="generator" content="AsciiDoc 9.0.0rc2" />
Junio C Hamano68cf15a2010-11-06 01:01:598<title>git-shortlog(1)</title>
Junio C Hamano1a4e8412005-12-27 08:17:239<style type="text/css">
Junio C Hamano9d971152012-12-19 00:43:1110/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
11
12/* Default font. */
13body {
14 font-family: Georgia,serif;
15}
16
17/* Title font. */
18h1, h2, h3, h4, h5, h6,
19div.title, caption.title,
20thead, p.table.header,
21#toctitle,
22#author, #revnumber, #revdate, #revremark,
23#footer {
24 font-family: Arial,Helvetica,sans-serif;
Junio C Hamano1a4e8412005-12-27 08:17:2325}
26
27body {
28 margin: 1em 5% 1em 5%;
29}
30
Junio C Hamanoba4b9282008-07-06 05:20:3131a {
32 color: blue;
33 text-decoration: underline;
34}
35a:visited {
36 color: fuchsia;
37}
Junio C Hamano1a4e8412005-12-27 08:17:2338
39em {
40 font-style: italic;
Junio C Hamano68cf15a2010-11-06 01:01:5941 color: navy;
Junio C Hamano1a4e8412005-12-27 08:17:2342}
43
44strong {
45 font-weight: bold;
Junio C Hamano68cf15a2010-11-06 01:01:5946 color: #083194;
Junio C Hamano1a4e8412005-12-27 08:17:2347}
48
Junio C Hamano1a4e8412005-12-27 08:17:2349h1, h2, h3, h4, h5, h6 {
50 color: #527bbd;
Junio C Hamano1a4e8412005-12-27 08:17:2351 margin-top: 1.2em;
52 margin-bottom: 0.5em;
53 line-height: 1.3;
54}
55
Junio C Hamanoba4b9282008-07-06 05:20:3156h1, h2, h3 {
Junio C Hamano1a4e8412005-12-27 08:17:2357 border-bottom: 2px solid silver;
58}
59h2 {
Junio C Hamano1a4e8412005-12-27 08:17:2360 padding-top: 0.5em;
61}
Junio C Hamanoba4b9282008-07-06 05:20:3162h3 {
63 float: left;
64}
65h3 + * {
66 clear: left;
67}
Junio C Hamano9d971152012-12-19 00:43:1168h5 {
69 font-size: 1.0em;
70}
Junio C Hamano1a4e8412005-12-27 08:17:2371
72div.sectionbody {
Junio C Hamano1a4e8412005-12-27 08:17:2373 margin-left: 0;
74}
75
76hr {
77 border: 1px solid silver;
78}
79
80p {
81 margin-top: 0.5em;
82 margin-bottom: 0.5em;
83}
84
Junio C Hamano68cf15a2010-11-06 01:01:5985ul, ol, li > p {
86 margin-top: 0;
87}
Junio C Hamano9d971152012-12-19 00:43:1188ul > li { color: #aaa; }
89ul > li > * { color: black; }
Junio C Hamano68cf15a2010-11-06 01:01:5990
Junio C Hamanoc14e6ad2014-10-31 20:25:5391.monospaced, code, pre {
92 font-family: "Courier New", Courier, monospace;
93 font-size: inherit;
94 color: navy;
Junio C Hamano1a4e8412005-12-27 08:17:2395 padding: 0;
96 margin: 0;
97}
Junio C Hamanoc14e6ad2014-10-31 20:25:5398pre {
99 white-space: pre-wrap;
100}
Junio C Hamano1a4e8412005-12-27 08:17:23101
Junio C Hamano9d971152012-12-19 00:43:11102#author {
Junio C Hamano1a4e8412005-12-27 08:17:23103 color: #527bbd;
Junio C Hamano1a4e8412005-12-27 08:17:23104 font-weight: bold;
Junio C Hamanoba4b9282008-07-06 05:20:31105 font-size: 1.1em;
Junio C Hamano1a4e8412005-12-27 08:17:23106}
Junio C Hamano9d971152012-12-19 00:43:11107#email {
Junio C Hamano1a4e8412005-12-27 08:17:23108}
Junio C Hamano9d971152012-12-19 00:43:11109#revnumber, #revdate, #revremark {
Junio C Hamano1a4e8412005-12-27 08:17:23110}
111
Junio C Hamano9d971152012-12-19 00:43:11112#footer {
Junio C Hamano1a4e8412005-12-27 08:17:23113 font-size: small;
114 border-top: 2px solid silver;
115 padding-top: 0.5em;
116 margin-top: 4.0em;
117}
Junio C Hamano9d971152012-12-19 00:43:11118#footer-text {
Junio C Hamano1a4e8412005-12-27 08:17:23119 float: left;
120 padding-bottom: 0.5em;
121}
Junio C Hamano9d971152012-12-19 00:43:11122#footer-badges {
Junio C Hamano1a4e8412005-12-27 08:17:23123 float: right;
124 padding-bottom: 0.5em;
125}
126
Junio C Hamano9d971152012-12-19 00:43:11127#preamble {
Junio C Hamano68cf15a2010-11-06 01:01:59128 margin-top: 1.5em;
129 margin-bottom: 1.5em;
130}
Junio C Hamano9d971152012-12-19 00:43:11131div.imageblock, div.exampleblock, div.verseblock,
Junio C Hamano1a4e8412005-12-27 08:17:23132div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
133div.admonitionblock {
Junio C Hamano7bd050f2011-09-22 06:32:22134 margin-top: 1.0em;
Junio C Hamano1a4e8412005-12-27 08:17:23135 margin-bottom: 1.5em;
136}
137div.admonitionblock {
Junio C Hamano7bd050f2011-09-22 06:32:22138 margin-top: 2.0em;
139 margin-bottom: 2.0em;
140 margin-right: 10%;
141 color: #606060;
Junio C Hamano1a4e8412005-12-27 08:17:23142}
143
144div.content { /* Block element content. */
145 padding: 0;
146}
147
148/* Block element titles. */
149div.title, caption.title {
Junio C Hamano68cf15a2010-11-06 01:01:59150 color: #527bbd;
Junio C Hamano1a4e8412005-12-27 08:17:23151 font-weight: bold;
152 text-align: left;
153 margin-top: 1.0em;
154 margin-bottom: 0.5em;
155}
156div.title + * {
157 margin-top: 0;
158}
159
160td div.title:first-child {
161 margin-top: 0.0em;
162}
163div.content div.title:first-child {
164 margin-top: 0.0em;
165}
166div.content + div.title {
167 margin-top: 0.0em;
168}
169
170div.sidebarblock > div.content {
171 background: #ffffee;
Junio C Hamano9d971152012-12-19 00:43:11172 border: 1px solid #dddddd;
173 border-left: 4px solid #f0f0f0;
Junio C Hamano1a4e8412005-12-27 08:17:23174 padding: 0.5em;
175}
176
177div.listingblock > div.content {
Junio C Hamano9d971152012-12-19 00:43:11178 border: 1px solid #dddddd;
179 border-left: 5px solid #f0f0f0;
180 background: #f8f8f8;
Junio C Hamano1a4e8412005-12-27 08:17:23181 padding: 0.5em;
182}
183
Junio C Hamano7bd050f2011-09-22 06:32:22184div.quoteblock, div.verseblock {
185 padding-left: 1.0em;
186 margin-left: 1.0em;
Junio C Hamano68cf15a2010-11-06 01:01:59187 margin-right: 10%;
Junio C Hamano9d971152012-12-19 00:43:11188 border-left: 5px solid #f0f0f0;
189 color: #888;
Junio C Hamano1a4e8412005-12-27 08:17:23190}
Junio C Hamano7bd050f2011-09-22 06:32:22191
Junio C Hamano68cf15a2010-11-06 01:01:59192div.quoteblock > div.attribution {
193 padding-top: 0.5em;
Junio C Hamano1a4e8412005-12-27 08:17:23194 text-align: right;
195}
Junio C Hamano68cf15a2010-11-06 01:01:59196
Junio C Hamano9d971152012-12-19 00:43:11197div.verseblock > pre.content {
198 font-family: inherit;
199 font-size: inherit;
Junio C Hamano68cf15a2010-11-06 01:01:59200}
201div.verseblock > div.attribution {
202 padding-top: 0.75em;
203 text-align: left;
204}
205/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
Junio C Hamanoba4b9282008-07-06 05:20:31206div.verseblock + div.attribution {
207 text-align: left;
208}
Junio C Hamano1a4e8412005-12-27 08:17:23209
210div.admonitionblock .icon {
211 vertical-align: top;
212 font-size: 1.1em;
213 font-weight: bold;
214 text-decoration: underline;
215 color: #527bbd;
216 padding-right: 0.5em;
217}
218div.admonitionblock td.content {
219 padding-left: 0.5em;
Junio C Hamano7bd050f2011-09-22 06:32:22220 border-left: 3px solid #dddddd;
Junio C Hamano1a4e8412005-12-27 08:17:23221}
222
223div.exampleblock > div.content {
Junio C Hamano7bd050f2011-09-22 06:32:22224 border-left: 3px solid #dddddd;
225 padding-left: 0.5em;
Junio C Hamano1a4e8412005-12-27 08:17:23226}
227
Junio C Hamano1a4e8412005-12-27 08:17:23228div.imageblock div.content { padding-left: 0; }
Junio C Hamanoc14e6ad2014-10-31 20:25:53229span.image img { border-style: none; vertical-align: text-bottom; }
Junio C Hamano68cf15a2010-11-06 01:01:59230a.image:visited { color: white; }
Junio C Hamano1a4e8412005-12-27 08:17:23231
232dl {
233 margin-top: 0.8em;
234 margin-bottom: 0.8em;
235}
236dt {
237 margin-top: 0.5em;
238 margin-bottom: 0;
Junio C Hamano68cf15a2010-11-06 01:01:59239 font-style: normal;
240 color: navy;
Junio C Hamano1a4e8412005-12-27 08:17:23241}
242dd > *:first-child {
Junio C Hamano68cf15a2010-11-06 01:01:59243 margin-top: 0.1em;
Junio C Hamano1a4e8412005-12-27 08:17:23244}
245
246ul, ol {
247 list-style-position: outside;
248}
Junio C Hamano68cf15a2010-11-06 01:01:59249ol.arabic {
250 list-style-type: decimal;
251}
252ol.loweralpha {
Junio C Hamano1a4e8412005-12-27 08:17:23253 list-style-type: lower-alpha;
254}
Junio C Hamano68cf15a2010-11-06 01:01:59255ol.upperalpha {
256 list-style-type: upper-alpha;
257}
258ol.lowerroman {
259 list-style-type: lower-roman;
260}
261ol.upperroman {
262 list-style-type: upper-roman;
263}
264
265div.compact ul, div.compact ol,
266div.compact p, div.compact p,
267div.compact div, div.compact div {
268 margin-top: 0.1em;
269 margin-bottom: 0.1em;
270}
Junio C Hamano1a4e8412005-12-27 08:17:23271
Junio C Hamano1a4e8412005-12-27 08:17:23272tfoot {
273 font-weight: bold;
274}
Junio C Hamano68cf15a2010-11-06 01:01:59275td > div.verse {
276 white-space: pre;
277}
Junio C Hamano68cf15a2010-11-06 01:01:59278
279div.hdlist {
Junio C Hamano1a4e8412005-12-27 08:17:23280 margin-top: 0.8em;
281 margin-bottom: 0.8em;
282}
Junio C Hamano68cf15a2010-11-06 01:01:59283div.hdlist tr {
284 padding-bottom: 15px;
Junio C Hamanoba4b9282008-07-06 05:20:31285}
Junio C Hamano68cf15a2010-11-06 01:01:59286dt.hdlist1.strong, td.hdlist1.strong {
287 font-weight: bold;
288}
289td.hdlist1 {
Junio C Hamano1a4e8412005-12-27 08:17:23290 vertical-align: top;
Junio C Hamano68cf15a2010-11-06 01:01:59291 font-style: normal;
Junio C Hamano1a4e8412005-12-27 08:17:23292 padding-right: 0.8em;
Junio C Hamano68cf15a2010-11-06 01:01:59293 color: navy;
Junio C Hamano1a4e8412005-12-27 08:17:23294}
Junio C Hamano68cf15a2010-11-06 01:01:59295td.hdlist2 {
Junio C Hamano1a4e8412005-12-27 08:17:23296 vertical-align: top;
297}
Junio C Hamano68cf15a2010-11-06 01:01:59298div.hdlist.compact tr {
299 margin: 0;
300 padding-bottom: 0;
301}
302
303.comment {
304 background: yellow;
305}
Junio C Hamano1a4e8412005-12-27 08:17:23306
Junio C Hamano7bd050f2011-09-22 06:32:22307.footnote, .footnoteref {
308 font-size: 0.8em;
309}
310
311span.footnote, span.footnoteref {
312 vertical-align: super;
313}
314
315#footnotes {
316 margin: 20px 0 20px 0;
317 padding: 7px 0 0 0;
318}
319
320#footnotes div.footnote {
321 margin: 0 0 5px 0;
322}
323
324#footnotes hr {
325 border: none;
326 border-top: 1px solid silver;
327 height: 1px;
328 text-align: left;
329 margin-left: 0;
330 width: 20%;
331 min-width: 100px;
332}
333
Junio C Hamano9d971152012-12-19 00:43:11334div.colist td {
335 padding-right: 0.5em;
336 padding-bottom: 0.3em;
337 vertical-align: top;
338}
339div.colist td img {
340 margin-top: 0.3em;
Junio C Hamano1a4e8412005-12-27 08:17:23341}
Junio C Hamanoba4b9282008-07-06 05:20:31342
Junio C Hamano9d971152012-12-19 00:43:11343@media print {
344 #footer-badges { display: none; }
345}
346
347#toc {
Junio C Hamano7bd050f2011-09-22 06:32:22348 margin-bottom: 2.5em;
349}
350
Junio C Hamano9d971152012-12-19 00:43:11351#toctitle {
Junio C Hamanoba4b9282008-07-06 05:20:31352 color: #527bbd;
Junio C Hamanoba4b9282008-07-06 05:20:31353 font-size: 1.1em;
354 font-weight: bold;
355 margin-top: 1.0em;
356 margin-bottom: 0.1em;
357}
358
Junio C Hamanoc14e6ad2014-10-31 20:25:53359div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
Junio C Hamanoba4b9282008-07-06 05:20:31360 margin-top: 0;
361 margin-bottom: 0;
362}
363div.toclevel2 {
364 margin-left: 2em;
365 font-size: 0.9em;
366}
367div.toclevel3 {
368 margin-left: 4em;
369 font-size: 0.9em;
370}
371div.toclevel4 {
372 margin-left: 6em;
373 font-size: 0.9em;
374}
Junio C Hamano9d971152012-12-19 00:43:11375
376span.aqua { color: aqua; }
377span.black { color: black; }
378span.blue { color: blue; }
379span.fuchsia { color: fuchsia; }
380span.gray { color: gray; }
381span.green { color: green; }
382span.lime { color: lime; }
383span.maroon { color: maroon; }
384span.navy { color: navy; }
385span.olive { color: olive; }
386span.purple { color: purple; }
387span.red { color: red; }
388span.silver { color: silver; }
389span.teal { color: teal; }
390span.white { color: white; }
391span.yellow { color: yellow; }
392
393span.aqua-background { background: aqua; }
394span.black-background { background: black; }
395span.blue-background { background: blue; }
396span.fuchsia-background { background: fuchsia; }
397span.gray-background { background: gray; }
398span.green-background { background: green; }
399span.lime-background { background: lime; }
400span.maroon-background { background: maroon; }
401span.navy-background { background: navy; }
402span.olive-background { background: olive; }
403span.purple-background { background: purple; }
404span.red-background { background: red; }
405span.silver-background { background: silver; }
406span.teal-background { background: teal; }
407span.white-background { background: white; }
408span.yellow-background { background: yellow; }
409
410span.big { font-size: 2em; }
411span.small { font-size: 0.6em; }
412
413span.underline { text-decoration: underline; }
414span.overline { text-decoration: overline; }
415span.line-through { text-decoration: line-through; }
416
Junio C Hamanoc14e6ad2014-10-31 20:25:53417div.unbreakable { page-break-inside: avoid; }
418
Junio C Hamano9d971152012-12-19 00:43:11419
420/*
421 * xhtml11 specific
422 *
423 * */
424
425div.tableblock {
426 margin-top: 1.0em;
427 margin-bottom: 1.5em;
428}
429div.tableblock > table {
430 border: 3px solid #527bbd;
431}
432thead, p.table.header {
433 font-weight: bold;
434 color: #527bbd;
435}
436p.table {
437 margin-top: 0;
438}
Junio C Hamano725b0da2020-01-22 22:02:40439/* Because the table frame attribute is overridden by CSS in most browsers. */
Junio C Hamano9d971152012-12-19 00:43:11440div.tableblock > table[frame="void"] {
441 border-style: none;
442}
443div.tableblock > table[frame="hsides"] {
444 border-left-style: none;
445 border-right-style: none;
446}
447div.tableblock > table[frame="vsides"] {
448 border-top-style: none;
449 border-bottom-style: none;
450}
451
452
453/*
454 * html5 specific
455 *
456 * */
457
458table.tableblock {
459 margin-top: 1.0em;
460 margin-bottom: 1.5em;
461}
462thead, p.tableblock.header {
463 font-weight: bold;
464 color: #527bbd;
465}
466p.tableblock {
467 margin-top: 0;
468}
469table.tableblock {
470 border-width: 3px;
471 border-spacing: 0px;
472 border-style: solid;
473 border-color: #527bbd;
474 border-collapse: collapse;
475}
476th.tableblock, td.tableblock {
477 border-width: 1px;
478 padding: 4px;
479 border-style: solid;
480 border-color: #527bbd;
481}
482
483table.tableblock.frame-topbot {
484 border-left-style: hidden;
485 border-right-style: hidden;
486}
487table.tableblock.frame-sides {
488 border-top-style: hidden;
489 border-bottom-style: hidden;
490}
491table.tableblock.frame-none {
492 border-style: hidden;
493}
494
495th.tableblock.halign-left, td.tableblock.halign-left {
496 text-align: left;
497}
498th.tableblock.halign-center, td.tableblock.halign-center {
499 text-align: center;
500}
501th.tableblock.halign-right, td.tableblock.halign-right {
502 text-align: right;
503}
504
505th.tableblock.valign-top, td.tableblock.valign-top {
506 vertical-align: top;
507}
508th.tableblock.valign-middle, td.tableblock.valign-middle {
509 vertical-align: middle;
510}
511th.tableblock.valign-bottom, td.tableblock.valign-bottom {
512 vertical-align: bottom;
513}
514
515
516/*
517 * manpage specific
518 *
519 * */
520
521body.manpage h1 {
Junio C Hamano68cf15a2010-11-06 01:01:59522 padding-top: 0.5em;
523 padding-bottom: 0.5em;
524 border-top: 2px solid silver;
525 border-bottom: 2px solid silver;
526}
Junio C Hamano9d971152012-12-19 00:43:11527body.manpage h2 {
Junio C Hamano68cf15a2010-11-06 01:01:59528 border-style: none;
529}
Junio C Hamano9d971152012-12-19 00:43:11530body.manpage div.sectionbody {
531 margin-left: 3em;
Junio C Hamano68cf15a2010-11-06 01:01:59532}
533
534@media print {
Junio C Hamano9d971152012-12-19 00:43:11535 body.manpage div#toc { display: none; }
Junio C Hamano68cf15a2010-11-06 01:01:59536}
Junio C Hamanoc14e6ad2014-10-31 20:25:53537
538
Junio C Hamano1a4e8412005-12-27 08:17:23539</style>
Junio C Hamano7bd050f2011-09-22 06:32:22540<script type="text/javascript">
541/*<![CDATA[*/
Junio C Hamano7bd050f2011-09-22 06:32:22542var asciidoc = { // Namespace.
543
544/////////////////////////////////////////////////////////////////////
545// Table Of Contents generator
546/////////////////////////////////////////////////////////////////////
547
548/* Author: Mihai Bazon, September 2002
549 * http://students.infoiasi.ro/~mishoo
550 *
551 * Table Of Content generator
552 * Version: 0.4
553 *
554 * Feel free to use this script under the terms of the GNU General Public
555 * License, as long as you do not remove or alter this notice.
556 */
557
558 /* modified by Troy D. Hanson, September 2006. License: GPL */
559 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
560
561// toclevels = 1..4.
562toc: function (toclevels) {
563
564 function getText(el) {
565 var text = "";
566 for (var i = el.firstChild; i != null; i = i.nextSibling) {
567 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
568 text += i.data;
569 else if (i.firstChild != null)
570 text += getText(i);
571 }
572 return text;
573 }
574
575 function TocEntry(el, text, toclevel) {
576 this.element = el;
577 this.text = text;
578 this.toclevel = toclevel;
579 }
580
581 function tocEntries(el, toclevels) {
582 var result = new Array;
Junio C Hamanoc14e6ad2014-10-31 20:25:53583 var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
Junio C Hamano7bd050f2011-09-22 06:32:22584 // Function that scans the DOM tree for header elements (the DOM2
585 // nodeIterator API would be a better technique but not supported by all
586 // browsers).
587 var iterate = function (el) {
588 for (var i = el.firstChild; i != null; i = i.nextSibling) {
589 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
590 var mo = re.exec(i.tagName);
591 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
592 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
593 }
594 iterate(i);
595 }
596 }
597 }
598 iterate(el);
599 return result;
600 }
601
602 var toc = document.getElementById("toc");
Junio C Hamano9d971152012-12-19 00:43:11603 if (!toc) {
604 return;
605 }
606
607 // Delete existing TOC entries in case we're reloading the TOC.
608 var tocEntriesToRemove = [];
609 var i;
610 for (i = 0; i < toc.childNodes.length; i++) {
611 var entry = toc.childNodes[i];
Junio C Hamanoc14e6ad2014-10-31 20:25:53612 if (entry.nodeName.toLowerCase() == 'div'
Junio C Hamano9d971152012-12-19 00:43:11613 && entry.getAttribute("class")
614 && entry.getAttribute("class").match(/^toclevel/))
615 tocEntriesToRemove.push(entry);
616 }
617 for (i = 0; i < tocEntriesToRemove.length; i++) {
618 toc.removeChild(tocEntriesToRemove[i]);
619 }
620
621 // Rebuild TOC entries.
Junio C Hamano7bd050f2011-09-22 06:32:22622 var entries = tocEntries(document.getElementById("content"), toclevels);
623 for (var i = 0; i < entries.length; ++i) {
624 var entry = entries[i];
625 if (entry.element.id == "")
626 entry.element.id = "_toc_" + i;
627 var a = document.createElement("a");
628 a.href = "#" + entry.element.id;
629 a.appendChild(document.createTextNode(entry.text));
630 var div = document.createElement("div");
631 div.appendChild(a);
632 div.className = "toclevel" + entry.toclevel;
633 toc.appendChild(div);
634 }
635 if (entries.length == 0)
636 toc.parentNode.removeChild(toc);
637},
638
639
640/////////////////////////////////////////////////////////////////////
641// Footnotes generator
642/////////////////////////////////////////////////////////////////////
643
644/* Based on footnote generation code from:
645 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
646 */
647
648footnotes: function () {
Junio C Hamano9d971152012-12-19 00:43:11649 // Delete existing footnote entries in case we're reloading the footnodes.
650 var i;
Junio C Hamano7bd050f2011-09-22 06:32:22651 var noteholder = document.getElementById("footnotes");
Junio C Hamano9d971152012-12-19 00:43:11652 if (!noteholder) {
653 return;
654 }
655 var entriesToRemove = [];
656 for (i = 0; i < noteholder.childNodes.length; i++) {
657 var entry = noteholder.childNodes[i];
Junio C Hamanoc14e6ad2014-10-31 20:25:53658 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
Junio C Hamano9d971152012-12-19 00:43:11659 entriesToRemove.push(entry);
660 }
661 for (i = 0; i < entriesToRemove.length; i++) {
662 noteholder.removeChild(entriesToRemove[i]);
663 }
664
665 // Rebuild footnote entries.
666 var cont = document.getElementById("content");
Junio C Hamano7bd050f2011-09-22 06:32:22667 var spans = cont.getElementsByTagName("span");
668 var refs = {};
669 var n = 0;
670 for (i=0; i<spans.length; i++) {
671 if (spans[i].className == "footnote") {
672 n++;
Junio C Hamano9d971152012-12-19 00:43:11673 var note = spans[i].getAttribute("data-note");
674 if (!note) {
675 // Use [\s\S] in place of . so multi-line matches work.
676 // Because JavaScript has no s (dotall) regex flag.
677 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
678 spans[i].innerHTML =
679 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
680 "' title='View footnote' class='footnote'>" + n + "</a>]";
681 spans[i].setAttribute("data-note", note);
682 }
Junio C Hamano7bd050f2011-09-22 06:32:22683 noteholder.innerHTML +=
684 "<div class='footnote' id='_footnote_" + n + "'>" +
685 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
686 n + "</a>. " + note + "</div>";
Junio C Hamano7bd050f2011-09-22 06:32:22687 var id =spans[i].getAttribute("id");
688 if (id != null) refs["#"+id] = n;
689 }
690 }
691 if (n == 0)
692 noteholder.parentNode.removeChild(noteholder);
693 else {
694 // Process footnoterefs.
695 for (i=0; i<spans.length; i++) {
696 if (spans[i].className == "footnoteref") {
697 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
698 href = href.match(/#.*/)[0]; // Because IE return full URL.
699 n = refs[href];
700 spans[i].innerHTML =
701 "[<a href='#_footnote_" + n +
702 "' title='View footnote' class='footnote'>" + n + "</a>]";
703 }
704 }
705 }
Junio C Hamano9d971152012-12-19 00:43:11706},
707
708install: function(toclevels) {
709 var timerId;
710
711 function reinstall() {
712 asciidoc.footnotes();
713 if (toclevels) {
714 asciidoc.toc(toclevels);
715 }
716 }
717
718 function reinstallAndRemoveTimer() {
719 clearInterval(timerId);
720 reinstall();
721 }
722
723 timerId = setInterval(reinstall, 500);
724 if (document.addEventListener)
725 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
726 else
727 window.onload = reinstallAndRemoveTimer;
Junio C Hamano7bd050f2011-09-22 06:32:22728}
729
730}
Junio C Hamano9d971152012-12-19 00:43:11731asciidoc.install();
Junio C Hamano7bd050f2011-09-22 06:32:22732/*]]>*/
733</script>
Junio C Hamano1a4e8412005-12-27 08:17:23734</head>
Junio C Hamano9d971152012-12-19 00:43:11735<body class="manpage">
Junio C Hamano1a4e8412005-12-27 08:17:23736<div id="header">
737<h1>
738git-shortlog(1) Manual Page
739</h1>
740<h2>NAME</h2>
741<div class="sectionbody">
742<p>git-shortlog -
Junio C Hamano1aa40d22010-01-21 17:46:43743 Summarize 'git log' output
Junio C Hamano1a4e8412005-12-27 08:17:23744</p>
745</div>
746</div>
Junio C Hamano7bd050f2011-09-22 06:32:22747<div id="content">
Junio C Hamano9d971152012-12-19 00:43:11748<div class="sect1">
Junio C Hamano68cf15a2010-11-06 01:01:59749<h2 id="_synopsis">SYNOPSIS</h2>
Junio C Hamano1a4e8412005-12-27 08:17:23750<div class="sectionbody">
Junio C Hamanob6bd6ce2007-04-18 23:54:28751<div class="verseblock">
Junio C Hamano85151f32018-04-10 00:52:26752<pre class="content"><em>git shortlog</em> [&lt;options&gt;] [&lt;revision range&gt;] [[--] &lt;path&gt;&#8230;]
753git log --pretty=short | <em>git shortlog</em> [&lt;options&gt;]</pre>
Junio C Hamano9d971152012-12-19 00:43:11754<div class="attribution">
Junio C Hamano68cf15a2010-11-06 01:01:59755</div></div>
Junio C Hamano1a4e8412005-12-27 08:17:23756</div>
Junio C Hamano9d971152012-12-19 00:43:11757</div>
758<div class="sect1">
Junio C Hamanoba4b9282008-07-06 05:20:31759<h2 id="_description">DESCRIPTION</h2>
Junio C Hamano1a4e8412005-12-27 08:17:23760<div class="sectionbody">
Junio C Hamano68cf15a2010-11-06 01:01:59761<div class="paragraph"><p>Summarizes <em>git log</em> output in a format suitable for inclusion
Junio C Hamano281fd392012-09-17 23:57:41762in release announcements. Each commit will be grouped by author and title.</p></div>
Junio C Hamano68cf15a2010-11-06 01:01:59763<div class="paragraph"><p>Additionally, "[PATCH]" will be stripped from the commit description.</p></div>
764<div class="paragraph"><p>If no revisions are passed on the command line and either standard input
Junio C Hamanocc7636a2010-05-21 14:57:53765is not a terminal or there is no current branch, <em>git shortlog</em> will
766output a summary of the log read from standard input, without
767reference to the current repository.</p></div>
Junio C Hamano33db4372006-06-07 19:51:45768</div>
Junio C Hamano9d971152012-12-19 00:43:11769</div>
770<div class="sect1">
Junio C Hamanoba4b9282008-07-06 05:20:31771<h2 id="_options">OPTIONS</h2>
Junio C Hamano5f1dfc72006-10-10 04:36:30772<div class="sectionbody">
Junio C Hamano68cf15a2010-11-06 01:01:59773<div class="dlist"><dl>
774<dt class="hdlist1">
Junio C Hamanoeb415992008-06-08 22:49:47775-n
776</dt>
Junio C Hamano68cf15a2010-11-06 01:01:59777<dt class="hdlist1">
Junio C Hamanoeb415992008-06-08 22:49:47778--numbered
Junio C Hamano5f1dfc72006-10-10 04:36:30779</dt>
780<dd>
781<p>
782 Sort output according to the number of commits per author instead
783 of author alphabetic order.
784</p>
785</dd>
Junio C Hamano68cf15a2010-11-06 01:01:59786<dt class="hdlist1">
Junio C Hamanoeb415992008-06-08 22:49:47787-s
788</dt>
Junio C Hamano68cf15a2010-11-06 01:01:59789<dt class="hdlist1">
Junio C Hamanoeb415992008-06-08 22:49:47790--summary
Junio C Hamano21c0b422006-10-12 19:10:36791</dt>
792<dd>
793<p>
Junio C Hamanof9771f62007-01-17 17:42:30794 Suppress commit description and provide a commit count summary only.
Junio C Hamano21c0b422006-10-12 19:10:36795</p>
796</dd>
Junio C Hamano68cf15a2010-11-06 01:01:59797<dt class="hdlist1">
Junio C Hamanoeb415992008-06-08 22:49:47798-e
799</dt>
Junio C Hamano68cf15a2010-11-06 01:01:59800<dt class="hdlist1">
Junio C Hamanoeb415992008-06-08 22:49:47801--email
Junio C Hamano0c0da5f2007-12-13 02:45:30802</dt>
803<dd>
804<p>
805 Show the email address of each author.
806</p>
807</dd>
Junio C Hamano68cf15a2010-11-06 01:01:59808<dt class="hdlist1">
Junio C Hamanod2179ef2010-10-22 04:12:17809--format[=&lt;format&gt;]
Junio C Hamanocc7636a2010-05-21 14:57:53810</dt>
811<dd>
812<p>
813 Instead of the commit subject, use some other information to
814 describe each commit. <em>&lt;format&gt;</em> can be any string accepted
Junio C Hamanoc14e6ad2014-10-31 20:25:53815 by the <code>--format</code> option of <em>git log</em>, such as <em>* [%h] %s</em>.
Junio C Hamanoa28a9202012-06-21 07:08:23816 (See the "PRETTY FORMATS" section of <a href="git-log.html">git-log(1)</a>.)
Junio C Hamanocc7636a2010-05-21 14:57:53817</p>
818<div class="literalblock">
819<div class="content">
Junio C Hamanoc14e6ad2014-10-31 20:25:53820<pre><code>Each pretty-printed commit will be rewrapped before it is shown.</code></pre>
Junio C Hamanocc7636a2010-05-21 14:57:53821</div></div>
822</dd>
Junio C Hamano68cf15a2010-11-06 01:01:59823<dt class="hdlist1">
Junio C Hamano36ebb0e2020-10-04 20:44:12824--group=&lt;type&gt;
825</dt>
826<dd>
827<p>
828 Group commits based on <code>&lt;type&gt;</code>. If no <code>--group</code> option is
829 specified, the default is <code>author</code>. <code>&lt;type&gt;</code> is one of:
830</p>
831<div class="openblock">
832<div class="content">
833<div class="ulist"><ul>
834<li>
835<p>
836<code>author</code>, commits are grouped by author
837</p>
838</li>
839<li>
840<p>
841<code>committer</code>, commits are grouped by committer (the same as <code>-c</code>)
842</p>
843</li>
844<li>
845<p>
846<code>trailer:&lt;field&gt;</code>, the <code>&lt;field&gt;</code> is interpreted as a case-insensitive
847 commit message trailer (see <a href="git-interpret-trailers.html">git-interpret-trailers(1)</a>). For
848 example, if your project uses <code>Reviewed-by</code> trailers, you might want
849 to see who has been reviewing with
850 <code>git shortlog -ns --group=trailer:reviewed-by</code>.
851</p>
852<div class="paragraph"><p>Note that commits that do not include the trailer will not be counted.
853Likewise, commits with multiple trailers (e.g., multiple signoffs) may
854be counted more than once (but only once per unique trailer value in
855that commit).</p></div>
856<div class="paragraph"><p>Shortlog will attempt to parse each trailer value as a <code>name &lt;email&gt;</code>
857identity. If successful, the mailmap is applied and the email is omitted
858unless the <code>--email</code> option is specified. If the value cannot be parsed
859as an identity, it will be taken literally and completely.</p></div>
860</li>
861</ul></div>
862</div></div>
863<div class="paragraph"><p>If <code>--group</code> is specified multiple times, commits are counted under each
864value (but again, only once per unique value in that commit). For
865example, <code>git shortlog --group=author --group=trailer:co-authored-by</code>
866counts both authors and co-authors.</p></div>
867</dd>
868<dt class="hdlist1">
Junio C Hamano9e35abf2016-12-27 22:37:27869-c
870</dt>
871<dt class="hdlist1">
872--committer
873</dt>
874<dd>
875<p>
Junio C Hamano36ebb0e2020-10-04 20:44:12876 This is an alias for <code>--group=committer</code>.
Junio C Hamano9e35abf2016-12-27 22:37:27877</p>
878</dd>
879<dt class="hdlist1">
Junio C Hamano1bdd3b02008-04-13 05:33:18880-w[&lt;width&gt;[,&lt;indent1&gt;[,&lt;indent2&gt;]]]
881</dt>
882<dd>
883<p>
Junio C Hamanoc14e6ad2014-10-31 20:25:53884 Linewrap the output by wrapping each line at <code>width</code>. The first
885 line of each entry is indented by <code>indent1</code> spaces, and the second
886 and subsequent lines are indented by <code>indent2</code> spaces. <code>width</code>,
887 <code>indent1</code>, and <code>indent2</code> default to 76, 6 and 9 respectively.
Junio C Hamano1bdd3b02008-04-13 05:33:18888</p>
Junio C Hamanoc14e6ad2014-10-31 20:25:53889<div class="paragraph"><p>If width is <code>0</code> (zero) then indent the lines of the output without wrapping
Junio C Hamano7dac6902013-01-12 08:25:31890them.</p></div>
Junio C Hamano1bdd3b02008-04-13 05:33:18891</dd>
Junio C Hamanof26c77e2013-04-27 00:06:04892<dt class="hdlist1">
893&lt;revision range&gt;
894</dt>
895<dd>
896<p>
897 Show only commits in the specified revision range. When no
Junio C Hamanoc14e6ad2014-10-31 20:25:53898 &lt;revision range&gt; is specified, it defaults to <code>HEAD</code> (i.e. the
899 whole history leading to the current commit). <code>origin..HEAD</code>
Junio C Hamanof26c77e2013-04-27 00:06:04900 specifies all the commits reachable from the current commit
Junio C Hamanoc14e6ad2014-10-31 20:25:53901 (i.e. <code>HEAD</code>), but not from <code>origin</code>. For a complete list of
Junio C Hamanof26c77e2013-04-27 00:06:04902 ways to spell &lt;revision range&gt;, see the "Specifying Ranges"
903 section of <a href="gitrevisions.html">gitrevisions(7)</a>.
904</p>
905</dd>
906<dt class="hdlist1">
907[--] &lt;path&gt;&#8230;
908</dt>
909<dd>
910<p>
911 Consider only commits that are enough to explain how the files
912 that match the specified paths came to be.
913</p>
Junio C Hamanoccb82522018-05-08 07:52:09914<div class="paragraph"><p>Paths may need to be prefixed with <code>--</code> to separate them from
Junio C Hamanof26c77e2013-04-27 00:06:04915options or the revision range, when confusion arises.</p></div>
916</dd>
Junio C Hamanoba4b9282008-07-06 05:20:31917</dl></div>
Junio C Hamano8ef91f32019-12-01 22:58:27918<div class="sect2">
919<h3 id="_commit_limiting">Commit Limiting</h3>
920<div class="paragraph"><p>Besides specifying a range of commits that should be listed using the
921special notations explained in the description, additional commit
922limiting may be applied.</p></div>
923<div class="paragraph"><p>Using more options generally further limits the output (e.g.
924<code>--since=&lt;date1&gt;</code> limits to commits newer than <code>&lt;date1&gt;</code>, and using it
925with <code>--grep=&lt;pattern&gt;</code> further limits to commits whose log message
926has a line that matches <code>&lt;pattern&gt;</code>), unless otherwise noted.</p></div>
927<div class="paragraph"><p>Note that these are applied before commit
928ordering and formatting options, such as <code>--reverse</code>.</p></div>
929<div class="dlist"><dl>
930<dt class="hdlist1">
931-&lt;number&gt;
932</dt>
933<dt class="hdlist1">
934-n &lt;number&gt;
935</dt>
936<dt class="hdlist1">
937--max-count=&lt;number&gt;
938</dt>
939<dd>
940<p>
941 Limit the number of commits to output.
942</p>
943</dd>
944<dt class="hdlist1">
945--skip=&lt;number&gt;
946</dt>
947<dd>
948<p>
949 Skip <em>number</em> commits before starting to show the commit output.
950</p>
951</dd>
952<dt class="hdlist1">
953--since=&lt;date&gt;
954</dt>
955<dt class="hdlist1">
956--after=&lt;date&gt;
957</dt>
958<dd>
959<p>
960 Show commits more recent than a specific date.
961</p>
962</dd>
963<dt class="hdlist1">
964--until=&lt;date&gt;
965</dt>
966<dt class="hdlist1">
967--before=&lt;date&gt;
968</dt>
969<dd>
970<p>
971 Show commits older than a specific date.
972</p>
973</dd>
974<dt class="hdlist1">
975--author=&lt;pattern&gt;
976</dt>
977<dt class="hdlist1">
978--committer=&lt;pattern&gt;
979</dt>
980<dd>
981<p>
982 Limit the commits output to ones with author/committer
983 header lines that match the specified pattern (regular
984 expression). With more than one <code>--author=&lt;pattern&gt;</code>,
985 commits whose author matches any of the given patterns are
986 chosen (similarly for multiple <code>--committer=&lt;pattern&gt;</code>).
987</p>
988</dd>
989<dt class="hdlist1">
990--grep-reflog=&lt;pattern&gt;
991</dt>
992<dd>
993<p>
994 Limit the commits output to ones with reflog entries that
995 match the specified pattern (regular expression). With
996 more than one <code>--grep-reflog</code>, commits whose reflog message
997 matches any of the given patterns are chosen. It is an
998 error to use this option unless <code>--walk-reflogs</code> is in use.
999</p>
1000</dd>
1001<dt class="hdlist1">
1002--grep=&lt;pattern&gt;
1003</dt>
1004<dd>
1005<p>
1006 Limit the commits output to ones with log message that
1007 matches the specified pattern (regular expression). With
1008 more than one <code>--grep=&lt;pattern&gt;</code>, commits whose message
1009 matches any of the given patterns are chosen (but see
1010 <code>--all-match</code>).
1011</p>
Junio C Hamanob3f862c2019-12-05 22:22:001012<div class="paragraph"><p>When <code>--notes</code> is in effect, the message from the notes is
Junio C Hamano8ef91f32019-12-01 22:58:271013matched as if it were part of the log message.</p></div>
1014</dd>
1015<dt class="hdlist1">
1016--all-match
1017</dt>
1018<dd>
1019<p>
1020 Limit the commits output to ones that match all given <code>--grep</code>,
1021 instead of ones that match at least one.
1022</p>
1023</dd>
1024<dt class="hdlist1">
1025--invert-grep
1026</dt>
1027<dd>
1028<p>
1029 Limit the commits output to ones with log message that do not
1030 match the pattern specified with <code>--grep=&lt;pattern&gt;</code>.
1031</p>
1032</dd>
1033<dt class="hdlist1">
1034-i
1035</dt>
1036<dt class="hdlist1">
1037--regexp-ignore-case
1038</dt>
1039<dd>
1040<p>
1041 Match the regular expression limiting patterns without regard to letter
1042 case.
1043</p>
1044</dd>
1045<dt class="hdlist1">
1046--basic-regexp
1047</dt>
1048<dd>
1049<p>
1050 Consider the limiting patterns to be basic regular expressions;
1051 this is the default.
1052</p>
1053</dd>
1054<dt class="hdlist1">
1055-E
1056</dt>
1057<dt class="hdlist1">
1058--extended-regexp
1059</dt>
1060<dd>
1061<p>
1062 Consider the limiting patterns to be extended regular expressions
1063 instead of the default basic regular expressions.
1064</p>
1065</dd>
1066<dt class="hdlist1">
1067-F
1068</dt>
1069<dt class="hdlist1">
1070--fixed-strings
1071</dt>
1072<dd>
1073<p>
1074 Consider the limiting patterns to be fixed strings (don&#8217;t interpret
1075 pattern as a regular expression).
1076</p>
1077</dd>
1078<dt class="hdlist1">
1079-P
1080</dt>
1081<dt class="hdlist1">
1082--perl-regexp
1083</dt>
1084<dd>
1085<p>
1086 Consider the limiting patterns to be Perl-compatible regular
1087 expressions.
1088</p>
1089<div class="paragraph"><p>Support for these types of regular expressions is an optional
1090compile-time dependency. If Git wasn&#8217;t compiled with support for them
1091providing this option will cause it to die.</p></div>
1092</dd>
1093<dt class="hdlist1">
1094--remove-empty
1095</dt>
1096<dd>
1097<p>
1098 Stop when a given path disappears from the tree.
1099</p>
1100</dd>
1101<dt class="hdlist1">
1102--merges
1103</dt>
1104<dd>
1105<p>
1106 Print only merge commits. This is exactly the same as <code>--min-parents=2</code>.
1107</p>
1108</dd>
1109<dt class="hdlist1">
1110--no-merges
1111</dt>
1112<dd>
1113<p>
1114 Do not print commits with more than one parent. This is
1115 exactly the same as <code>--max-parents=1</code>.
1116</p>
1117</dd>
1118<dt class="hdlist1">
1119--min-parents=&lt;number&gt;
1120</dt>
1121<dt class="hdlist1">
1122--max-parents=&lt;number&gt;
1123</dt>
1124<dt class="hdlist1">
1125--no-min-parents
1126</dt>
1127<dt class="hdlist1">
1128--no-max-parents
1129</dt>
1130<dd>
1131<p>
1132 Show only commits which have at least (or at most) that many parent
1133 commits. In particular, <code>--max-parents=1</code> is the same as <code>--no-merges</code>,
1134 <code>--min-parents=2</code> is the same as <code>--merges</code>. <code>--max-parents=0</code>
1135 gives all root commits and <code>--min-parents=3</code> all octopus merges.
1136</p>
1137<div class="paragraph"><p><code>--no-min-parents</code> and <code>--no-max-parents</code> reset these limits (to no limit)
1138again. Equivalent forms are <code>--min-parents=0</code> (any commit has 0 or more
1139parents) and <code>--max-parents=-1</code> (negative numbers denote no upper limit).</p></div>
1140</dd>
1141<dt class="hdlist1">
1142--first-parent
1143</dt>
1144<dd>
1145<p>
1146 Follow only the first parent commit upon seeing a merge
1147 commit. This option can give a better overview when
1148 viewing the evolution of a particular topic branch,
1149 because merges into a topic branch tend to be only about
1150 adjusting to updated upstream from time to time, and
1151 this option allows you to ignore the individual commits
Junio C Hamano255163d2020-08-18 00:37:231152 brought in to your history by such a merge.
Junio C Hamano8ef91f32019-12-01 22:58:271153</p>
1154</dd>
1155<dt class="hdlist1">
1156--not
1157</dt>
1158<dd>
1159<p>
1160 Reverses the meaning of the <em>&#94;</em> prefix (or lack thereof)
1161 for all following revision specifiers, up to the next <code>--not</code>.
1162</p>
1163</dd>
1164<dt class="hdlist1">
1165--all
1166</dt>
1167<dd>
1168<p>
1169 Pretend as if all the refs in <code>refs/</code>, along with <code>HEAD</code>, are
1170 listed on the command line as <em>&lt;commit&gt;</em>.
1171</p>
1172</dd>
1173<dt class="hdlist1">
1174--branches[=&lt;pattern&gt;]
1175</dt>
1176<dd>
1177<p>
1178 Pretend as if all the refs in <code>refs/heads</code> are listed
1179 on the command line as <em>&lt;commit&gt;</em>. If <em>&lt;pattern&gt;</em> is given, limit
1180 branches to ones matching given shell glob. If pattern lacks <em>?</em>,
1181 <em>&#42;</em>, or <em>[</em>, <em>/&#42;</em> at the end is implied.
1182</p>
1183</dd>
1184<dt class="hdlist1">
1185--tags[=&lt;pattern&gt;]
1186</dt>
1187<dd>
1188<p>
1189 Pretend as if all the refs in <code>refs/tags</code> are listed
1190 on the command line as <em>&lt;commit&gt;</em>. If <em>&lt;pattern&gt;</em> is given, limit
1191 tags to ones matching given shell glob. If pattern lacks <em>?</em>, <em>&#42;</em>,
1192 or <em>[</em>, <em>/&#42;</em> at the end is implied.
1193</p>
1194</dd>
1195<dt class="hdlist1">
1196--remotes[=&lt;pattern&gt;]
1197</dt>
1198<dd>
1199<p>
1200 Pretend as if all the refs in <code>refs/remotes</code> are listed
1201 on the command line as <em>&lt;commit&gt;</em>. If <em>&lt;pattern&gt;</em> is given, limit
1202 remote-tracking branches to ones matching given shell glob.
1203 If pattern lacks <em>?</em>, <em>&#42;</em>, or <em>[</em>, <em>/&#42;</em> at the end is implied.
1204</p>
1205</dd>
1206<dt class="hdlist1">
1207--glob=&lt;glob-pattern&gt;
1208</dt>
1209<dd>
1210<p>
1211 Pretend as if all the refs matching shell glob <em>&lt;glob-pattern&gt;</em>
1212 are listed on the command line as <em>&lt;commit&gt;</em>. Leading <em>refs/</em>,
1213 is automatically prepended if missing. If pattern lacks <em>?</em>, <em>&#42;</em>,
1214 or <em>[</em>, <em>/&#42;</em> at the end is implied.
1215</p>
1216</dd>
1217<dt class="hdlist1">
1218--exclude=&lt;glob-pattern&gt;
1219</dt>
1220<dd>
1221<p>
1222 Do not include refs matching <em>&lt;glob-pattern&gt;</em> that the next <code>--all</code>,
1223 <code>--branches</code>, <code>--tags</code>, <code>--remotes</code>, or <code>--glob</code> would otherwise
1224 consider. Repetitions of this option accumulate exclusion patterns
1225 up to the next <code>--all</code>, <code>--branches</code>, <code>--tags</code>, <code>--remotes</code>, or
1226 <code>--glob</code> option (other options or arguments do not clear
1227 accumulated patterns).
1228</p>
1229<div class="paragraph"><p>The patterns given should not begin with <code>refs/heads</code>, <code>refs/tags</code>, or
1230<code>refs/remotes</code> when applied to <code>--branches</code>, <code>--tags</code>, or <code>--remotes</code>,
1231respectively, and they must begin with <code>refs/</code> when applied to <code>--glob</code>
1232or <code>--all</code>. If a trailing <em>/&#42;</em> is intended, it must be given
1233explicitly.</p></div>
1234</dd>
1235<dt class="hdlist1">
1236--reflog
1237</dt>
1238<dd>
1239<p>
1240 Pretend as if all objects mentioned by reflogs are listed on the
1241 command line as <code>&lt;commit&gt;</code>.
1242</p>
1243</dd>
1244<dt class="hdlist1">
1245--alternate-refs
1246</dt>
1247<dd>
1248<p>
1249 Pretend as if all objects mentioned as ref tips of alternate
1250 repositories were listed on the command line. An alternate
1251 repository is any repository whose object directory is specified
1252 in <code>objects/info/alternates</code>. The set of included objects may
1253 be modified by <code>core.alternateRefsCommand</code>, etc. See
1254 <a href="git-config.html">git-config(1)</a>.
1255</p>
1256</dd>
1257<dt class="hdlist1">
1258--single-worktree
1259</dt>
1260<dd>
1261<p>
1262 By default, all working trees will be examined by the
1263 following options when there are more than one (see
1264 <a href="git-worktree.html">git-worktree(1)</a>): <code>--all</code>, <code>--reflog</code> and
1265 <code>--indexed-objects</code>.
1266 This option forces them to examine the current working tree
1267 only.
1268</p>
1269</dd>
1270<dt class="hdlist1">
1271--ignore-missing
1272</dt>
1273<dd>
1274<p>
1275 Upon seeing an invalid object name in the input, pretend as if
1276 the bad input was not given.
1277</p>
1278</dd>
1279<dt class="hdlist1">
1280--bisect
1281</dt>
1282<dd>
1283<p>
1284 Pretend as if the bad bisection ref <code>refs/bisect/bad</code>
1285 was listed and as if it was followed by <code>--not</code> and the good
1286 bisection refs <code>refs/bisect/good-*</code> on the command
Junio C Hamano255163d2020-08-18 00:37:231287 line.
Junio C Hamano8ef91f32019-12-01 22:58:271288</p>
1289</dd>
1290<dt class="hdlist1">
1291--stdin
1292</dt>
1293<dd>
1294<p>
1295 In addition to the <em>&lt;commit&gt;</em> listed on the command
1296 line, read them from the standard input. If a <code>--</code> separator is
1297 seen, stop reading commits and start reading paths to limit the
1298 result.
1299</p>
1300</dd>
1301<dt class="hdlist1">
1302--cherry-mark
1303</dt>
1304<dd>
1305<p>
1306 Like <code>--cherry-pick</code> (see below) but mark equivalent commits
1307 with <code>=</code> rather than omitting them, and inequivalent ones with <code>+</code>.
1308</p>
1309</dd>
1310<dt class="hdlist1">
1311--cherry-pick
1312</dt>
1313<dd>
1314<p>
1315 Omit any commit that introduces the same change as
1316 another commit on the &#8220;other side&#8221; when the set of
1317 commits are limited with symmetric difference.
1318</p>
1319<div class="paragraph"><p>For example, if you have two branches, <code>A</code> and <code>B</code>, a usual way
1320to list all commits on only one side of them is with
1321<code>--left-right</code> (see the example below in the description of
1322the <code>--left-right</code> option). However, it shows the commits that were
1323cherry-picked from the other branch (for example, &#8220;3rd on b&#8221; may be
1324cherry-picked from branch A). With this option, such pairs of commits are
1325excluded from the output.</p></div>
1326</dd>
1327<dt class="hdlist1">
1328--left-only
1329</dt>
1330<dt class="hdlist1">
1331--right-only
1332</dt>
1333<dd>
1334<p>
1335 List only commits on the respective side of a symmetric difference,
1336 i.e. only those which would be marked <code>&lt;</code> resp. <code>&gt;</code> by
1337 <code>--left-right</code>.
1338</p>
1339<div class="paragraph"><p>For example, <code>--cherry-pick --right-only A...B</code> omits those
1340commits from <code>B</code> which are in <code>A</code> or are patch-equivalent to a commit in
1341<code>A</code>. In other words, this lists the <code>+</code> commits from <code>git cherry A B</code>.
1342More precisely, <code>--cherry-pick --right-only --no-merges</code> gives the exact
1343list.</p></div>
1344</dd>
1345<dt class="hdlist1">
1346--cherry
1347</dt>
1348<dd>
1349<p>
1350 A synonym for <code>--right-only --cherry-mark --no-merges</code>; useful to
1351 limit the output to the commits on our side and mark those that
1352 have been applied to the other side of a forked history with
1353 <code>git log --cherry upstream...mybranch</code>, similar to
1354 <code>git cherry upstream mybranch</code>.
1355</p>
1356</dd>
1357<dt class="hdlist1">
1358-g
1359</dt>
1360<dt class="hdlist1">
1361--walk-reflogs
1362</dt>
1363<dd>
1364<p>
1365 Instead of walking the commit ancestry chain, walk
1366 reflog entries from the most recent one to older ones.
1367 When this option is used you cannot specify commits to
1368 exclude (that is, <em>&#94;commit</em>, <em>commit1..commit2</em>,
1369 and <em>commit1...commit2</em> notations cannot be used).
1370</p>
Junio C Hamanob4896852019-12-10 23:15:091371<div class="paragraph"><p>With <code>--pretty</code> format other than <code>oneline</code> and <code>reference</code> (for obvious reasons),
Junio C Hamano8ef91f32019-12-01 22:58:271372this causes the output to have two extra lines of information
1373taken from the reflog. The reflog designator in the output may be shown
1374as <code>ref@{Nth}</code> (where <code>Nth</code> is the reverse-chronological index in the
1375reflog) or as <code>ref@{timestamp}</code> (with the timestamp for that entry),
1376depending on a few rules:</p></div>
1377<div class="openblock">
1378<div class="content">
1379<div class="olist arabic"><ol class="arabic">
1380<li>
1381<p>
1382If the starting point is specified as <code>ref@{Nth}</code>, show the index
1383 format.
1384</p>
1385</li>
1386<li>
1387<p>
1388If the starting point was specified as <code>ref@{now}</code>, show the
1389 timestamp format.
1390</p>
1391</li>
1392<li>
1393<p>
1394If neither was used, but <code>--date</code> was given on the command line, show
1395 the timestamp in the format requested by <code>--date</code>.
1396</p>
1397</li>
1398<li>
1399<p>
1400Otherwise, show the index format.
1401</p>
1402</li>
1403</ol></div>
1404</div></div>
1405<div class="paragraph"><p>Under <code>--pretty=oneline</code>, the commit message is
1406prefixed with this information on the same line.
1407This option cannot be combined with <code>--reverse</code>.
1408See also <a href="git-reflog.html">git-reflog(1)</a>.</p></div>
Junio C Hamanob4896852019-12-10 23:15:091409<div class="paragraph"><p>Under <code>--pretty=reference</code>, this information will not be shown at all.</p></div>
Junio C Hamano8ef91f32019-12-01 22:58:271410</dd>
1411<dt class="hdlist1">
1412--merge
1413</dt>
1414<dd>
1415<p>
1416 After a failed merge, show refs that touch files having a
1417 conflict and don&#8217;t exist on all heads to merge.
1418</p>
1419</dd>
1420<dt class="hdlist1">
1421--boundary
1422</dt>
1423<dd>
1424<p>
1425 Output excluded boundary commits. Boundary commits are
1426 prefixed with <code>-</code>.
1427</p>
1428</dd>
1429</dl></div>
1430</div>
1431<div class="sect2">
1432<h3 id="_history_simplification">History Simplification</h3>
1433<div class="paragraph"><p>Sometimes you are only interested in parts of the history, for example the
1434commits modifying a particular &lt;path&gt;. But there are two parts of
1435<em>History Simplification</em>, one part is selecting the commits and the other
1436is how to do it, as there are various strategies to simplify the history.</p></div>
1437<div class="paragraph"><p>The following options select the commits to be shown:</p></div>
1438<div class="dlist"><dl>
1439<dt class="hdlist1">
1440&lt;paths&gt;
1441</dt>
1442<dd>
1443<p>
1444 Commits modifying the given &lt;paths&gt; are selected.
1445</p>
1446</dd>
1447<dt class="hdlist1">
1448--simplify-by-decoration
1449</dt>
1450<dd>
1451<p>
1452 Commits that are referred by some branch or tag are selected.
1453</p>
1454</dd>
1455</dl></div>
1456<div class="paragraph"><p>Note that extra commits can be shown to give a meaningful history.</p></div>
1457<div class="paragraph"><p>The following options affect the way the simplification is performed:</p></div>
1458<div class="dlist"><dl>
1459<dt class="hdlist1">
1460Default mode
1461</dt>
1462<dd>
1463<p>
1464 Simplifies the history to the simplest history explaining the
1465 final state of the tree. Simplest because it prunes some side
1466 branches if the end result is the same (i.e. merging branches
1467 with the same content)
1468</p>
1469</dd>
1470<dt class="hdlist1">
Junio C Hamano67bf2242020-04-22 21:41:441471--show-pulls
1472</dt>
1473<dd>
1474<p>
1475 Include all commits from the default mode, but also any merge
1476 commits that are not TREESAME to the first parent but are
1477 TREESAME to a later parent. This mode is helpful for showing
1478 the merge commits that "first introduced" a change to a branch.
1479</p>
1480</dd>
1481<dt class="hdlist1">
Junio C Hamano8ef91f32019-12-01 22:58:271482--full-history
1483</dt>
1484<dd>
1485<p>
1486 Same as the default mode, but does not prune some history.
1487</p>
1488</dd>
1489<dt class="hdlist1">
1490--dense
1491</dt>
1492<dd>
1493<p>
1494 Only the selected commits are shown, plus some to have a
1495 meaningful history.
1496</p>
1497</dd>
1498<dt class="hdlist1">
1499--sparse
1500</dt>
1501<dd>
1502<p>
1503 All commits in the simplified history are shown.
1504</p>
1505</dd>
1506<dt class="hdlist1">
1507--simplify-merges
1508</dt>
1509<dd>
1510<p>
1511 Additional option to <code>--full-history</code> to remove some needless
1512 merges from the resulting history, as there are no selected
1513 commits contributing to this merge.
1514</p>
1515</dd>
1516<dt class="hdlist1">
1517--ancestry-path
1518</dt>
1519<dd>
1520<p>
1521 When given a range of commits to display (e.g. <em>commit1..commit2</em>
1522 or <em>commit2 &#94;commit1</em>), only display commits that exist
1523 directly on the ancestry chain between the <em>commit1</em> and
1524 <em>commit2</em>, i.e. commits that are both descendants of <em>commit1</em>,
1525 and ancestors of <em>commit2</em>.
1526</p>
1527</dd>
1528</dl></div>
1529<div class="paragraph"><p>A more detailed explanation follows.</p></div>
1530<div class="paragraph"><p>Suppose you specified <code>foo</code> as the &lt;paths&gt;. We shall call commits
1531that modify <code>foo</code> !TREESAME, and the rest TREESAME. (In a diff
1532filtered for <code>foo</code>, they look different and equal, respectively.)</p></div>
1533<div class="paragraph"><p>In the following, we will always refer to the same example history to
1534illustrate the differences between simplification settings. We assume
1535that you are filtering for a file <code>foo</code> in this commit graph:</p></div>
1536<div class="listingblock">
1537<div class="content">
1538<pre><code> .-A---M---N---O---P---Q
1539 / / / / / /
1540 I B C D E Y
1541 \ / / / / /
1542 `-------------' X</code></pre>
1543</div></div>
1544<div class="paragraph"><p>The horizontal line of history A---Q is taken to be the first parent of
1545each merge. The commits are:</p></div>
1546<div class="ulist"><ul>
1547<li>
1548<p>
1549<code>I</code> is the initial commit, in which <code>foo</code> exists with contents
1550 &#8220;asdf&#8221;, and a file <code>quux</code> exists with contents &#8220;quux&#8221;. Initial
1551 commits are compared to an empty tree, so <code>I</code> is !TREESAME.
1552</p>
1553</li>
1554<li>
1555<p>
1556In <code>A</code>, <code>foo</code> contains just &#8220;foo&#8221;.
1557</p>
1558</li>
1559<li>
1560<p>
1561<code>B</code> contains the same change as <code>A</code>. Its merge <code>M</code> is trivial and
1562 hence TREESAME to all parents.
1563</p>
1564</li>
1565<li>
1566<p>
1567<code>C</code> does not change <code>foo</code>, but its merge <code>N</code> changes it to &#8220;foobar&#8221;,
1568 so it is not TREESAME to any parent.
1569</p>
1570</li>
1571<li>
1572<p>
1573<code>D</code> sets <code>foo</code> to &#8220;baz&#8221;. Its merge <code>O</code> combines the strings from
1574 <code>N</code> and <code>D</code> to &#8220;foobarbaz&#8221;; i.e., it is not TREESAME to any parent.
1575</p>
1576</li>
1577<li>
1578<p>
1579<code>E</code> changes <code>quux</code> to &#8220;xyzzy&#8221;, and its merge <code>P</code> combines the
1580 strings to &#8220;quux xyzzy&#8221;. <code>P</code> is TREESAME to <code>O</code>, but not to <code>E</code>.
1581</p>
1582</li>
1583<li>
1584<p>
1585<code>X</code> is an independent root commit that added a new file <code>side</code>, and <code>Y</code>
1586 modified it. <code>Y</code> is TREESAME to <code>X</code>. Its merge <code>Q</code> added <code>side</code> to <code>P</code>, and
1587 <code>Q</code> is TREESAME to <code>P</code>, but not to <code>Y</code>.
1588</p>
1589</li>
1590</ul></div>
1591<div class="paragraph"><p><code>rev-list</code> walks backwards through history, including or excluding
1592commits based on whether <code>--full-history</code> and/or parent rewriting
1593(via <code>--parents</code> or <code>--children</code>) are used. The following settings
1594are available.</p></div>
1595<div class="dlist"><dl>
1596<dt class="hdlist1">
1597Default mode
1598</dt>
1599<dd>
1600<p>
1601 Commits are included if they are not TREESAME to any parent
1602 (though this can be changed, see <code>--sparse</code> below). If the
1603 commit was a merge, and it was TREESAME to one parent, follow
1604 only that parent. (Even if there are several TREESAME
1605 parents, follow only one of them.) Otherwise, follow all
1606 parents.
1607</p>
1608<div class="paragraph"><p>This results in:</p></div>
1609<div class="listingblock">
1610<div class="content">
1611<pre><code> .-A---N---O
1612 / / /
1613 I---------D</code></pre>
1614</div></div>
1615<div class="paragraph"><p>Note how the rule to only follow the TREESAME parent, if one is
1616available, removed <code>B</code> from consideration entirely. <code>C</code> was
1617considered via <code>N</code>, but is TREESAME. Root commits are compared to an
1618empty tree, so <code>I</code> is !TREESAME.</p></div>
1619<div class="paragraph"><p>Parent/child relations are only visible with <code>--parents</code>, but that does
1620not affect the commits selected in default mode, so we have shown the
1621parent lines.</p></div>
1622</dd>
1623<dt class="hdlist1">
1624--full-history without parent rewriting
1625</dt>
1626<dd>
1627<p>
1628 This mode differs from the default in one point: always follow
1629 all parents of a merge, even if it is TREESAME to one of them.
1630 Even if more than one side of the merge has commits that are
1631 included, this does not imply that the merge itself is! In
1632 the example, we get
1633</p>
1634<div class="listingblock">
1635<div class="content">
1636<pre><code> I A B N D O P Q</code></pre>
1637</div></div>
1638<div class="paragraph"><p><code>M</code> was excluded because it is TREESAME to both parents. <code>E</code>,
1639<code>C</code> and <code>B</code> were all walked, but only <code>B</code> was !TREESAME, so the others
1640do not appear.</p></div>
1641<div class="paragraph"><p>Note that without parent rewriting, it is not really possible to talk
1642about the parent/child relationships between the commits, so we show
1643them disconnected.</p></div>
1644</dd>
1645<dt class="hdlist1">
1646--full-history with parent rewriting
1647</dt>
1648<dd>
1649<p>
1650 Ordinary commits are only included if they are !TREESAME
1651 (though this can be changed, see <code>--sparse</code> below).
1652</p>
1653<div class="paragraph"><p>Merges are always included. However, their parent list is rewritten:
1654Along each parent, prune away commits that are not included
1655themselves. This results in</p></div>
1656<div class="listingblock">
1657<div class="content">
1658<pre><code> .-A---M---N---O---P---Q
1659 / / / / /
1660 I B / D /
1661 \ / / / /
1662 `-------------'</code></pre>
1663</div></div>
1664<div class="paragraph"><p>Compare to <code>--full-history</code> without rewriting above. Note that <code>E</code>
1665was pruned away because it is TREESAME, but the parent list of P was
1666rewritten to contain <code>E</code>'s parent <code>I</code>. The same happened for <code>C</code> and
1667<code>N</code>, and <code>X</code>, <code>Y</code> and <code>Q</code>.</p></div>
1668</dd>
1669</dl></div>
1670<div class="paragraph"><p>In addition to the above settings, you can change whether TREESAME
1671affects inclusion:</p></div>
1672<div class="dlist"><dl>
1673<dt class="hdlist1">
1674--dense
1675</dt>
1676<dd>
1677<p>
1678 Commits that are walked are included if they are not TREESAME
1679 to any parent.
1680</p>
1681</dd>
1682<dt class="hdlist1">
1683--sparse
1684</dt>
1685<dd>
1686<p>
1687 All commits that are walked are included.
1688</p>
1689<div class="paragraph"><p>Note that without <code>--full-history</code>, this still simplifies merges: if
1690one of the parents is TREESAME, we follow only that one, so the other
1691sides of the merge are never walked.</p></div>
1692</dd>
1693<dt class="hdlist1">
1694--simplify-merges
1695</dt>
1696<dd>
1697<p>
1698 First, build a history graph in the same way that
1699 <code>--full-history</code> with parent rewriting does (see above).
1700</p>
1701<div class="paragraph"><p>Then simplify each commit <code>C</code> to its replacement <code>C'</code> in the final
1702history according to the following rules:</p></div>
1703<div class="openblock">
1704<div class="content">
1705<div class="ulist"><ul>
1706<li>
1707<p>
1708Set <code>C'</code> to <code>C</code>.
1709</p>
1710</li>
1711<li>
1712<p>
1713Replace each parent <code>P</code> of <code>C'</code> with its simplification <code>P'</code>. In
1714 the process, drop parents that are ancestors of other parents or that are
1715 root commits TREESAME to an empty tree, and remove duplicates, but take care
1716 to never drop all parents that we are TREESAME to.
1717</p>
1718</li>
1719<li>
1720<p>
1721If after this parent rewriting, <code>C'</code> is a root or merge commit (has
1722 zero or &gt;1 parents), a boundary commit, or !TREESAME, it remains.
1723 Otherwise, it is replaced with its only parent.
1724</p>
1725</li>
1726</ul></div>
1727</div></div>
1728<div class="paragraph"><p>The effect of this is best shown by way of comparing to
1729<code>--full-history</code> with parent rewriting. The example turns into:</p></div>
1730<div class="listingblock">
1731<div class="content">
1732<pre><code> .-A---M---N---O
1733 / / /
1734 I B D
1735 \ / /
1736 `---------'</code></pre>
1737</div></div>
1738<div class="paragraph"><p>Note the major differences in <code>N</code>, <code>P</code>, and <code>Q</code> over <code>--full-history</code>:</p></div>
1739<div class="openblock">
1740<div class="content">
1741<div class="ulist"><ul>
1742<li>
1743<p>
1744<code>N</code>'s parent list had <code>I</code> removed, because it is an ancestor of the
1745 other parent <code>M</code>. Still, <code>N</code> remained because it is !TREESAME.
1746</p>
1747</li>
1748<li>
1749<p>
1750<code>P</code>'s parent list similarly had <code>I</code> removed. <code>P</code> was then
1751 removed completely, because it had one parent and is TREESAME.
1752</p>
1753</li>
1754<li>
1755<p>
1756<code>Q</code>'s parent list had <code>Y</code> simplified to <code>X</code>. <code>X</code> was then removed, because it
1757 was a TREESAME root. <code>Q</code> was then removed completely, because it had one
1758 parent and is TREESAME.
1759</p>
1760</li>
1761</ul></div>
1762</div></div>
1763</dd>
1764</dl></div>
Junio C Hamano67bf2242020-04-22 21:41:441765<div class="paragraph"><p>There is another simplification mode available:</p></div>
Junio C Hamano8ef91f32019-12-01 22:58:271766<div class="dlist"><dl>
1767<dt class="hdlist1">
1768--ancestry-path
1769</dt>
1770<dd>
1771<p>
1772 Limit the displayed commits to those directly on the ancestry
1773 chain between the &#8220;from&#8221; and &#8220;to&#8221; commits in the given commit
1774 range. I.e. only display commits that are ancestor of the &#8220;to&#8221;
1775 commit and descendants of the &#8220;from&#8221; commit.
1776</p>
1777<div class="paragraph"><p>As an example use case, consider the following commit history:</p></div>
1778<div class="listingblock">
1779<div class="content">
1780<pre><code> D---E-------F
1781 / \ \
1782 B---C---G---H---I---J
1783 / \
1784 A-------K---------------L--M</code></pre>
1785</div></div>
1786<div class="paragraph"><p>A regular <em>D..M</em> computes the set of commits that are ancestors of <code>M</code>,
1787but excludes the ones that are ancestors of <code>D</code>. This is useful to see
1788what happened to the history leading to <code>M</code> since <code>D</code>, in the sense
1789that &#8220;what does <code>M</code> have that did not exist in <code>D</code>&#8221;. The result in this
1790example would be all the commits, except <code>A</code> and <code>B</code> (and <code>D</code> itself,
1791of course).</p></div>
1792<div class="paragraph"><p>When we want to find out what commits in <code>M</code> are contaminated with the
1793bug introduced by <code>D</code> and need fixing, however, we might want to view
1794only the subset of <em>D..M</em> that are actually descendants of <code>D</code>, i.e.
1795excluding <code>C</code> and <code>K</code>. This is exactly what the <code>--ancestry-path</code>
1796option does. Applied to the <em>D..M</em> range, it results in:</p></div>
1797<div class="listingblock">
1798<div class="content">
1799<pre><code> E-------F
1800 \ \
1801 G---H---I---J
1802 \
1803 L--M</code></pre>
1804</div></div>
1805</dd>
1806</dl></div>
Junio C Hamano67bf2242020-04-22 21:41:441807<div class="paragraph"><p>Before discussing another option, <code>--show-pulls</code>, we need to
1808create a new example history.</p></div>
Junio C Hamano0cb719f2020-05-31 20:04:391809<div class="paragraph"><p>A common problem users face when looking at simplified history is that a
Junio C Hamano67bf2242020-04-22 21:41:441810commit they know changed a file somehow does not appear in the file&#8217;s
1811simplified history. Let&#8217;s demonstrate a new example and show how options
1812such as <code>--full-history</code> and <code>--simplify-merges</code> works in that case:</p></div>
Junio C Hamano67bf2242020-04-22 21:41:441813<div class="listingblock">
1814<div class="content">
1815<pre><code> .-A---M-----C--N---O---P
1816 / / \ \ \/ / /
1817 I B \ R-'`-Z' /
1818 \ / \/ /
1819 \ / /\ /
1820 `---X--' `---Y--'</code></pre>
1821</div></div>
Junio C Hamano0cb719f2020-05-31 20:04:391822<div class="paragraph"><p>For this example, suppose <code>I</code> created <code>file.txt</code> which was modified by
Junio C Hamano67bf2242020-04-22 21:41:441823<code>A</code>, <code>B</code>, and <code>X</code> in different ways. The single-parent commits <code>C</code>, <code>Z</code>,
1824and <code>Y</code> do not change <code>file.txt</code>. The merge commit <code>M</code> was created by
1825resolving the merge conflict to include both changes from <code>A</code> and <code>B</code>
1826and hence is not TREESAME to either. The merge commit <code>R</code>, however, was
1827created by ignoring the contents of <code>file.txt</code> at <code>M</code> and taking only
1828the contents of <code>file.txt</code> at <code>X</code>. Hence, <code>R</code> is TREESAME to <code>X</code> but not
1829<code>M</code>. Finally, the natural merge resolution to create <code>N</code> is to take the
1830contents of <code>file.txt</code> at <code>R</code>, so <code>N</code> is TREESAME to <code>R</code> but not <code>C</code>.
1831The merge commits <code>O</code> and <code>P</code> are TREESAME to their first parents, but
1832not to their second parents, <code>Z</code> and <code>Y</code> respectively.</p></div>
Junio C Hamano0cb719f2020-05-31 20:04:391833<div class="paragraph"><p>When using the default mode, <code>N</code> and <code>R</code> both have a TREESAME parent, so
Junio C Hamano67bf2242020-04-22 21:41:441834those edges are walked and the others are ignored. The resulting history
1835graph is:</p></div>
Junio C Hamano67bf2242020-04-22 21:41:441836<div class="listingblock">
1837<div class="content">
1838<pre><code> I---X</code></pre>
1839</div></div>
Junio C Hamano0cb719f2020-05-31 20:04:391840<div class="paragraph"><p>When using <code>--full-history</code>, Git walks every edge. This will discover
Junio C Hamano67bf2242020-04-22 21:41:441841the commits <code>A</code> and <code>B</code> and the merge <code>M</code>, but also will reveal the
1842merge commits <code>O</code> and <code>P</code>. With parent rewriting, the resulting graph is:</p></div>
Junio C Hamano67bf2242020-04-22 21:41:441843<div class="listingblock">
1844<div class="content">
1845<pre><code> .-A---M--------N---O---P
1846 / / \ \ \/ / /
1847 I B \ R-'`--' /
1848 \ / \/ /
1849 \ / /\ /
1850 `---X--' `------'</code></pre>
1851</div></div>
Junio C Hamano0cb719f2020-05-31 20:04:391852<div class="paragraph"><p>Here, the merge commits <code>O</code> and <code>P</code> contribute extra noise, as they did
Junio C Hamano67bf2242020-04-22 21:41:441853not actually contribute a change to <code>file.txt</code>. They only merged a topic
1854that was based on an older version of <code>file.txt</code>. This is a common
1855issue in repositories using a workflow where many contributors work in
1856parallel and merge their topic branches along a single trunk: manu
1857unrelated merges appear in the <code>--full-history</code> results.</p></div>
Junio C Hamano0cb719f2020-05-31 20:04:391858<div class="paragraph"><p>When using the <code>--simplify-merges</code> option, the commits <code>O</code> and <code>P</code>
Junio C Hamano67bf2242020-04-22 21:41:441859disappear from the results. This is because the rewritten second parents
1860of <code>O</code> and <code>P</code> are reachable from their first parents. Those edges are
1861removed and then the commits look like single-parent commits that are
1862TREESAME to their parent. This also happens to the commit <code>N</code>, resulting
1863in a history view as follows:</p></div>
Junio C Hamano67bf2242020-04-22 21:41:441864<div class="listingblock">
1865<div class="content">
1866<pre><code> .-A---M--.
1867 / / \
1868 I B R
1869 \ / /
1870 \ / /
1871 `---X--'</code></pre>
1872</div></div>
Junio C Hamano0cb719f2020-05-31 20:04:391873<div class="paragraph"><p>In this view, we see all of the important single-parent changes from
Junio C Hamano67bf2242020-04-22 21:41:441874<code>A</code>, <code>B</code>, and <code>X</code>. We also see the carefully-resolved merge <code>M</code> and the
1875not-so-carefully-resolved merge <code>R</code>. This is usually enough information
1876to determine why the commits <code>A</code> and <code>B</code> "disappeared" from history in
1877the default view. However, there are a few issues with this approach.</p></div>
Junio C Hamano0cb719f2020-05-31 20:04:391878<div class="paragraph"><p>The first issue is performance. Unlike any previous option, the
Junio C Hamano67bf2242020-04-22 21:41:441879<code>--simplify-merges</code> option requires walking the entire commit history
1880before returning a single result. This can make the option difficult to
1881use for very large repositories.</p></div>
Junio C Hamano0cb719f2020-05-31 20:04:391882<div class="paragraph"><p>The second issue is one of auditing. When many contributors are working
Junio C Hamano67bf2242020-04-22 21:41:441883on the same repository, it is important which merge commits introduced
1884a change into an important branch. The problematic merge <code>R</code> above is
1885not likely to be the merge commit that was used to merge into an
1886important branch. Instead, the merge <code>N</code> was used to merge <code>R</code> and <code>X</code>
1887into the important branch. This commit may have information about why
1888the change <code>X</code> came to override the changes from <code>A</code> and <code>B</code> in its
1889commit message.</p></div>
Junio C Hamano0cb719f2020-05-31 20:04:391890<div class="dlist"><dl>
1891<dt class="hdlist1">
1892--show-pulls
1893</dt>
1894<dd>
1895<p>
1896 In addition to the commits shown in the default history, show
1897 each merge commit that is not TREESAME to its first parent but
1898 is TREESAME to a later parent.
1899</p>
1900<div class="paragraph"><p>When a merge commit is included by <code>--show-pulls</code>, the merge is
Junio C Hamano67bf2242020-04-22 21:41:441901treated as if it "pulled" the change from another branch. When using
1902<code>--show-pulls</code> on this example (and no other options) the resulting
1903graph is:</p></div>
Junio C Hamano67bf2242020-04-22 21:41:441904<div class="listingblock">
1905<div class="content">
1906<pre><code> I---X---R---N</code></pre>
1907</div></div>
Junio C Hamano0cb719f2020-05-31 20:04:391908<div class="paragraph"><p>Here, the merge commits <code>R</code> and <code>N</code> are included because they pulled
Junio C Hamano67bf2242020-04-22 21:41:441909the commits <code>X</code> and <code>R</code> into the base branch, respectively. These
1910merges are the reason the commits <code>A</code> and <code>B</code> do not appear in the
1911default history.</p></div>
Junio C Hamano0cb719f2020-05-31 20:04:391912<div class="paragraph"><p>When <code>--show-pulls</code> is paired with <code>--simplify-merges</code>, the
Junio C Hamano67bf2242020-04-22 21:41:441913graph includes all of the necessary information:</p></div>
Junio C Hamano67bf2242020-04-22 21:41:441914<div class="listingblock">
1915<div class="content">
1916<pre><code> .-A---M--. N
1917 / / \ /
1918 I B R
1919 \ / /
1920 \ / /
1921 `---X--'</code></pre>
1922</div></div>
Junio C Hamano0cb719f2020-05-31 20:04:391923<div class="paragraph"><p>Notice that since <code>M</code> is reachable from <code>R</code>, the edge from <code>N</code> to <code>M</code>
Junio C Hamano67bf2242020-04-22 21:41:441924was simplified away. However, <code>N</code> still appears in the history as an
1925important commit because it "pulled" the change <code>R</code> into the main
1926branch.</p></div>
Junio C Hamano0cb719f2020-05-31 20:04:391927</dd>
1928</dl></div>
Junio C Hamano8ef91f32019-12-01 22:58:271929<div class="paragraph"><p>The <code>--simplify-by-decoration</code> option allows you to view only the
1930big picture of the topology of the history, by omitting commits
1931that are not referenced by tags. Commits are marked as !TREESAME
1932(in other words, kept after history simplification rules described
1933above) if (1) they are referenced by tags, or (2) they change the
1934contents of the paths given on the command line. All other
1935commits are marked as TREESAME (subject to be simplified away).</p></div>
1936</div>
Junio C Hamano5f1dfc72006-10-10 04:36:301937</div>
Junio C Hamano9d971152012-12-19 00:43:111938</div>
1939<div class="sect1">
Junio C Hamano8bc410e2009-02-15 10:38:191940<h2 id="_mapping_authors">MAPPING AUTHORS</h2>
Junio C Hamano33db4372006-06-07 19:51:451941<div class="sectionbody">
Junio C Hamano7887f9b2021-01-25 23:32:331942<div class="paragraph"><p>See <a href="gitmailmap.html">gitmailmap(5)</a>.</p></div>
Junio C Hamanoa70c9882021-02-23 00:57:121943<div class="paragraph"><p>Note that if <code>git shortlog</code> is run outside of a repository (to process
1944log contents on standard input), it will look for a <code>.mailmap</code> file in
1945the current directory.</p></div>
Junio C Hamano1a4e8412005-12-27 08:17:231946</div>
Junio C Hamano9d971152012-12-19 00:43:111947</div>
1948<div class="sect1">
Junio C Hamanoba4b9282008-07-06 05:20:311949<h2 id="_git">GIT</h2>
Junio C Hamano1a4e8412005-12-27 08:17:231950<div class="sectionbody">
Junio C Hamanoa28a9202012-06-21 07:08:231951<div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
Junio C Hamano1a4e8412005-12-27 08:17:231952</div>
Junio C Hamano7bd050f2011-09-22 06:32:221953</div>
Junio C Hamano9d971152012-12-19 00:43:111954</div>
Junio C Hamano7bd050f2011-09-22 06:32:221955<div id="footnotes"><hr /></div>
Junio C Hamano1a4e8412005-12-27 08:17:231956<div id="footer">
1957<div id="footer-text">
Junio C Hamano2ef0ba32018-01-26 23:13:531958Last updated
Junio C Hamanoa70c9882021-02-23 00:57:121959 2021-02-22 16:54:23 PST
Junio C Hamano1a4e8412005-12-27 08:17:231960</div>
1961</div>
1962</body>
1963</html>