Autogenerated HTML docs for v2.45.1-204-gd8ab1
[git-htmldocs.git] / git-blame.html
blob49b3f86dd4920e154617e1fafaba997e5eb564b4
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!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>
6 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
7 <meta name="generator" content="AsciiDoc 10.2.0" />
8 <title>git-blame(1)</title>
9 <style type="text/css">
10 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
12 /* Default font. */
13 body {
14 font-family: Georgia,serif;
17 /* Title font. */
18 h1, h2, h3, h4, h5, h6,
19 div.title, caption.title,
20 thead, p.table.header,
21 #toctitle,
22 #author, #revnumber, #revdate, #revremark,
23 #footer {
24 font-family: Arial,Helvetica,sans-serif;
27 body {
28 margin: 1em 5% 1em 5%;
31 a {
32 color: blue;
33 text-decoration: underline;
35 a:visited {
36 color: fuchsia;
39 em {
40 font-style: italic;
41 color: navy;
44 strong {
45 font-weight: bold;
46 color: #083194;
49 h1, h2, h3, h4, h5, h6 {
50 color: #527bbd;
51 margin-top: 1.2em;
52 margin-bottom: 0.5em;
53 line-height: 1.3;
56 h1, h2, h3 {
57 border-bottom: 2px solid silver;
59 h2 {
60 padding-top: 0.5em;
62 h3 {
63 float: left;
65 h3 + * {
66 clear: left;
68 h5 {
69 font-size: 1.0em;
72 div.sectionbody {
73 margin-left: 0;
76 hr {
77 border: 1px solid silver;
80 p {
81 margin-top: 0.5em;
82 margin-bottom: 0.5em;
85 ul, ol, li > p {
86 margin-top: 0;
88 ul > li { color: #aaa; }
89 ul > li > * { color: black; }
91 .monospaced, code, pre {
92 font-family: "Courier New", Courier, monospace;
93 font-size: inherit;
94 color: navy;
95 padding: 0;
96 margin: 0;
98 pre {
99 white-space: pre-wrap;
102 #author {
103 color: #527bbd;
104 font-weight: bold;
105 font-size: 1.1em;
107 #email {
109 #revnumber, #revdate, #revremark {
112 #footer {
113 font-size: small;
114 border-top: 2px solid silver;
115 padding-top: 0.5em;
116 margin-top: 4.0em;
118 #footer-text {
119 float: left;
120 padding-bottom: 0.5em;
122 #footer-badges {
123 float: right;
124 padding-bottom: 0.5em;
127 #preamble {
128 margin-top: 1.5em;
129 margin-bottom: 1.5em;
131 div.imageblock, div.exampleblock, div.verseblock,
132 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
133 div.admonitionblock {
134 margin-top: 1.0em;
135 margin-bottom: 1.5em;
137 div.admonitionblock {
138 margin-top: 2.0em;
139 margin-bottom: 2.0em;
140 margin-right: 10%;
141 color: #606060;
144 div.content { /* Block element content. */
145 padding: 0;
148 /* Block element titles. */
149 div.title, caption.title {
150 color: #527bbd;
151 font-weight: bold;
152 text-align: left;
153 margin-top: 1.0em;
154 margin-bottom: 0.5em;
156 div.title + * {
157 margin-top: 0;
160 td div.title:first-child {
161 margin-top: 0.0em;
163 div.content div.title:first-child {
164 margin-top: 0.0em;
166 div.content + div.title {
167 margin-top: 0.0em;
170 div.sidebarblock > div.content {
171 background: #ffffee;
172 border: 1px solid #dddddd;
173 border-left: 4px solid #f0f0f0;
174 padding: 0.5em;
177 div.listingblock > div.content {
178 border: 1px solid #dddddd;
179 border-left: 5px solid #f0f0f0;
180 background: #f8f8f8;
181 padding: 0.5em;
184 div.quoteblock, div.verseblock {
185 padding-left: 1.0em;
186 margin-left: 1.0em;
187 margin-right: 10%;
188 border-left: 5px solid #f0f0f0;
189 color: #888;
192 div.quoteblock > div.attribution {
193 padding-top: 0.5em;
194 text-align: right;
197 div.verseblock > pre.content {
198 font-family: inherit;
199 font-size: inherit;
201 div.verseblock > div.attribution {
202 padding-top: 0.75em;
203 text-align: left;
205 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
206 div.verseblock + div.attribution {
207 text-align: left;
210 div.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;
218 div.admonitionblock td.content {
219 padding-left: 0.5em;
220 border-left: 3px solid #dddddd;
223 div.exampleblock > div.content {
224 border-left: 3px solid #dddddd;
225 padding-left: 0.5em;
228 div.imageblock div.content { padding-left: 0; }
229 span.image img { border-style: none; vertical-align: text-bottom; }
230 a.image:visited { color: white; }
232 dl {
233 margin-top: 0.8em;
234 margin-bottom: 0.8em;
236 dt {
237 margin-top: 0.5em;
238 margin-bottom: 0;
239 font-style: normal;
240 color: navy;
242 dd > *:first-child {
243 margin-top: 0.1em;
246 ul, ol {
247 list-style-position: outside;
249 ol.arabic {
250 list-style-type: decimal;
252 ol.loweralpha {
253 list-style-type: lower-alpha;
255 ol.upperalpha {
256 list-style-type: upper-alpha;
258 ol.lowerroman {
259 list-style-type: lower-roman;
261 ol.upperroman {
262 list-style-type: upper-roman;
265 div.compact ul, div.compact ol,
266 div.compact p, div.compact p,
267 div.compact div, div.compact div {
268 margin-top: 0.1em;
269 margin-bottom: 0.1em;
272 tfoot {
273 font-weight: bold;
275 td > div.verse {
276 white-space: pre;
279 div.hdlist {
280 margin-top: 0.8em;
281 margin-bottom: 0.8em;
283 div.hdlist tr {
284 padding-bottom: 15px;
286 dt.hdlist1.strong, td.hdlist1.strong {
287 font-weight: bold;
289 td.hdlist1 {
290 vertical-align: top;
291 font-style: normal;
292 padding-right: 0.8em;
293 color: navy;
295 td.hdlist2 {
296 vertical-align: top;
298 div.hdlist.compact tr {
299 margin: 0;
300 padding-bottom: 0;
303 .comment {
304 background: yellow;
307 .footnote, .footnoteref {
308 font-size: 0.8em;
311 span.footnote, span.footnoteref {
312 vertical-align: super;
315 #footnotes {
316 margin: 20px 0 20px 0;
317 padding: 7px 0 0 0;
320 #footnotes div.footnote {
321 margin: 0 0 5px 0;
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;
334 div.colist td {
335 padding-right: 0.5em;
336 padding-bottom: 0.3em;
337 vertical-align: top;
339 div.colist td img {
340 margin-top: 0.3em;
343 @media print {
344 #footer-badges { display: none; }
347 #toc {
348 margin-bottom: 2.5em;
351 #toctitle {
352 color: #527bbd;
353 font-size: 1.1em;
354 font-weight: bold;
355 margin-top: 1.0em;
356 margin-bottom: 0.1em;
359 div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
360 margin-top: 0;
361 margin-bottom: 0;
363 div.toclevel2 {
364 margin-left: 2em;
365 font-size: 0.9em;
367 div.toclevel3 {
368 margin-left: 4em;
369 font-size: 0.9em;
371 div.toclevel4 {
372 margin-left: 6em;
373 font-size: 0.9em;
376 span.aqua { color: aqua; }
377 span.black { color: black; }
378 span.blue { color: blue; }
379 span.fuchsia { color: fuchsia; }
380 span.gray { color: gray; }
381 span.green { color: green; }
382 span.lime { color: lime; }
383 span.maroon { color: maroon; }
384 span.navy { color: navy; }
385 span.olive { color: olive; }
386 span.purple { color: purple; }
387 span.red { color: red; }
388 span.silver { color: silver; }
389 span.teal { color: teal; }
390 span.white { color: white; }
391 span.yellow { color: yellow; }
393 span.aqua-background { background: aqua; }
394 span.black-background { background: black; }
395 span.blue-background { background: blue; }
396 span.fuchsia-background { background: fuchsia; }
397 span.gray-background { background: gray; }
398 span.green-background { background: green; }
399 span.lime-background { background: lime; }
400 span.maroon-background { background: maroon; }
401 span.navy-background { background: navy; }
402 span.olive-background { background: olive; }
403 span.purple-background { background: purple; }
404 span.red-background { background: red; }
405 span.silver-background { background: silver; }
406 span.teal-background { background: teal; }
407 span.white-background { background: white; }
408 span.yellow-background { background: yellow; }
410 span.big { font-size: 2em; }
411 span.small { font-size: 0.6em; }
413 span.underline { text-decoration: underline; }
414 span.overline { text-decoration: overline; }
415 span.line-through { text-decoration: line-through; }
417 div.unbreakable { page-break-inside: avoid; }
421 * xhtml11 specific
423 * */
425 div.tableblock {
426 margin-top: 1.0em;
427 margin-bottom: 1.5em;
429 div.tableblock > table {
430 border: 3px solid #527bbd;
432 thead, p.table.header {
433 font-weight: bold;
434 color: #527bbd;
436 p.table {
437 margin-top: 0;
439 /* Because the table frame attribute is overridden by CSS in most browsers. */
440 div.tableblock > table[frame="void"] {
441 border-style: none;
443 div.tableblock > table[frame="hsides"] {
444 border-left-style: none;
445 border-right-style: none;
447 div.tableblock > table[frame="vsides"] {
448 border-top-style: none;
449 border-bottom-style: none;
454 * html5 specific
456 * */
458 table.tableblock {
459 margin-top: 1.0em;
460 margin-bottom: 1.5em;
462 thead, p.tableblock.header {
463 font-weight: bold;
464 color: #527bbd;
466 p.tableblock {
467 margin-top: 0;
469 table.tableblock {
470 border-width: 3px;
471 border-spacing: 0px;
472 border-style: solid;
473 border-color: #527bbd;
474 border-collapse: collapse;
476 th.tableblock, td.tableblock {
477 border-width: 1px;
478 padding: 4px;
479 border-style: solid;
480 border-color: #527bbd;
483 table.tableblock.frame-topbot {
484 border-left-style: hidden;
485 border-right-style: hidden;
487 table.tableblock.frame-sides {
488 border-top-style: hidden;
489 border-bottom-style: hidden;
491 table.tableblock.frame-none {
492 border-style: hidden;
495 th.tableblock.halign-left, td.tableblock.halign-left {
496 text-align: left;
498 th.tableblock.halign-center, td.tableblock.halign-center {
499 text-align: center;
501 th.tableblock.halign-right, td.tableblock.halign-right {
502 text-align: right;
505 th.tableblock.valign-top, td.tableblock.valign-top {
506 vertical-align: top;
508 th.tableblock.valign-middle, td.tableblock.valign-middle {
509 vertical-align: middle;
511 th.tableblock.valign-bottom, td.tableblock.valign-bottom {
512 vertical-align: bottom;
517 * manpage specific
519 * */
521 body.manpage h1 {
522 padding-top: 0.5em;
523 padding-bottom: 0.5em;
524 border-top: 2px solid silver;
525 border-bottom: 2px solid silver;
527 body.manpage h2 {
528 border-style: none;
530 body.manpage div.sectionbody {
531 margin-left: 3em;
534 @media print {
535 body.manpage div#toc { display: none; }
539 </style>
540 <script type="text/javascript">
541 /*<![CDATA[*/
542 var asciidoc = { // Namespace.
544 /////////////////////////////////////////////////////////////////////
545 // Table Of Contents generator
546 /////////////////////////////////////////////////////////////////////
548 /* Author: Mihai Bazon, September 2002
549 * http://students.infoiasi.ro/~mishoo
551 * Table Of Content generator
552 * Version: 0.4
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.
558 /* modified by Troy D. Hanson, September 2006. License: GPL */
559 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
561 // toclevels = 1..4.
562 toc: function (toclevels) {
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);
572 return text;
575 function TocEntry(el, text, toclevel) {
576 this.element = el;
577 this.text = text;
578 this.toclevel = toclevel;
581 function tocEntries(el, toclevels) {
582 var result = new Array;
583 var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
584 // 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);
594 iterate(i);
598 iterate(el);
599 return result;
602 var toc = document.getElementById("toc");
603 if (!toc) {
604 return;
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];
612 if (entry.nodeName.toLowerCase() == 'div'
613 && entry.getAttribute("class")
614 && entry.getAttribute("class").match(/^toclevel/))
615 tocEntriesToRemove.push(entry);
617 for (i = 0; i < tocEntriesToRemove.length; i++) {
618 toc.removeChild(tocEntriesToRemove[i]);
621 // Rebuild TOC entries.
622 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);
635 if (entries.length == 0)
636 toc.parentNode.removeChild(toc);
640 /////////////////////////////////////////////////////////////////////
641 // Footnotes generator
642 /////////////////////////////////////////////////////////////////////
644 /* Based on footnote generation code from:
645 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
648 footnotes: function () {
649 // Delete existing footnote entries in case we're reloading the footnodes.
650 var i;
651 var noteholder = document.getElementById("footnotes");
652 if (!noteholder) {
653 return;
655 var entriesToRemove = [];
656 for (i = 0; i < noteholder.childNodes.length; i++) {
657 var entry = noteholder.childNodes[i];
658 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
659 entriesToRemove.push(entry);
661 for (i = 0; i < entriesToRemove.length; i++) {
662 noteholder.removeChild(entriesToRemove[i]);
665 // Rebuild footnote entries.
666 var cont = document.getElementById("content");
667 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++;
673 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);
683 noteholder.innerHTML +=
684 "<div class='footnote' id='_footnote_" + n + "'>" +
685 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
686 n + "</a>. " + note + "</div>";
687 var id =spans[i].getAttribute("id");
688 if (id != null) refs["#"+id] = n;
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>]";
708 install: function(toclevels) {
709 var timerId;
711 function reinstall() {
712 asciidoc.footnotes();
713 if (toclevels) {
714 asciidoc.toc(toclevels);
718 function reinstallAndRemoveTimer() {
719 clearInterval(timerId);
720 reinstall();
723 timerId = setInterval(reinstall, 500);
724 if (document.addEventListener)
725 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
726 else
727 window.onload = reinstallAndRemoveTimer;
731 asciidoc.install();
732 /*]]>*/
733 </script>
734 </head>
735 <body class="manpage">
736 <div id="header">
737 <h1>
738 git-blame(1) Manual Page
739 </h1>
740 <h2>NAME</h2>
741 <div class="sectionbody">
742 <p>git-blame -
743 Show what revision and author last modified each line of a file
744 </p>
745 </div>
746 </div>
747 <div id="content">
748 <div class="sect1">
749 <h2 id="_synopsis">SYNOPSIS</h2>
750 <div class="sectionbody">
751 <div class="verseblock">
752 <pre class="content"><em>git blame</em> [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
753 [-L &lt;range&gt;] [-S &lt;revs-file&gt;] [-M] [-C] [-C] [-C] [--since=&lt;date&gt;]
754 [--ignore-rev &lt;rev&gt;] [--ignore-revs-file &lt;file&gt;]
755 [--color-lines] [--color-by-age] [--progress] [--abbrev=&lt;n&gt;]
756 [ --contents &lt;file&gt; ] [&lt;rev&gt; | --reverse &lt;rev&gt;..&lt;rev&gt;] [--] &lt;file&gt;</pre>
757 <div class="attribution">
758 </div></div>
759 </div>
760 </div>
761 <div class="sect1">
762 <h2 id="_description">DESCRIPTION</h2>
763 <div class="sectionbody">
764 <div class="paragraph"><p>Annotates each line in the given file with information from the revision which
765 last modified the line. Optionally, start annotating from the given revision.</p></div>
766 <div class="paragraph"><p>When specified one or more times, <code>-L</code> restricts annotation to the requested
767 lines.</p></div>
768 <div class="paragraph"><p>The origin of lines is automatically followed across whole-file
769 renames (currently there is no option to turn the rename-following
770 off). To follow lines moved from one file to another, or to follow
771 lines that were copied and pasted from another file, etc., see the
772 <code>-C</code> and <code>-M</code> options.</p></div>
773 <div class="paragraph"><p>The report does not tell you anything about lines which have been deleted or
774 replaced; you need to use a tool such as <em>git diff</em> or the "pickaxe"
775 interface briefly mentioned in the following paragraph.</p></div>
776 <div class="paragraph"><p>Apart from supporting file annotation, Git also supports searching the
777 development history for when a code snippet occurred in a change. This makes it
778 possible to track when a code snippet was added to a file, moved or copied
779 between files, and eventually deleted or replaced. It works by searching for
780 a text string in the diff. A small example of the pickaxe interface
781 that searches for <code>blame_usage</code>:</p></div>
782 <div class="listingblock">
783 <div class="content">
784 <pre><code>$ git log --pretty=oneline -S'blame_usage'
785 5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S &lt;ancestry-file&gt;
786 ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output</code></pre>
787 </div></div>
788 </div>
789 </div>
790 <div class="sect1">
791 <h2 id="_options">OPTIONS</h2>
792 <div class="sectionbody">
793 <div class="dlist"><dl>
794 <dt class="hdlist1">
796 </dt>
797 <dd>
799 Show blank SHA-1 for boundary commits. This can also
800 be controlled via the <code>blame.blankBoundary</code> config option.
801 </p>
802 </dd>
803 <dt class="hdlist1">
804 --root
805 </dt>
806 <dd>
808 Do not treat root commits as boundaries. This can also be
809 controlled via the <code>blame.showRoot</code> config option.
810 </p>
811 </dd>
812 <dt class="hdlist1">
813 --show-stats
814 </dt>
815 <dd>
817 Include additional statistics at the end of blame output.
818 </p>
819 </dd>
820 <dt class="hdlist1">
821 -L &lt;start&gt;,&lt;end&gt;
822 </dt>
823 <dt class="hdlist1">
824 -L :&lt;funcname&gt;
825 </dt>
826 <dd>
828 Annotate only the line range given by <em>&lt;start&gt;,&lt;end&gt;</em>,
829 or by the function name regex <em>&lt;funcname&gt;</em>.
830 May be specified multiple times. Overlapping ranges are allowed.
831 </p>
832 <div class="paragraph"><p><em>&lt;start&gt;</em> and <em>&lt;end&gt;</em> are optional. <code>-L &lt;start&gt;</code> or <code>-L &lt;start&gt;,</code> spans from
833 <em>&lt;start&gt;</em> to end of file. <code>-L ,&lt;end&gt;</code> spans from start of file to <em>&lt;end&gt;</em>.</p></div>
834 <div class="paragraph"><p><em>&lt;start&gt;</em> and <em>&lt;end&gt;</em> can take one of these forms:</p></div>
835 <div class="ulist"><ul>
836 <li>
838 number
839 </p>
840 <div class="paragraph"><p>If <em>&lt;start&gt;</em> or <em>&lt;end&gt;</em> is a number, it specifies an
841 absolute line number (lines count from 1).</p></div>
842 </li>
843 <li>
845 <code>/regex/</code>
846 </p>
847 <div class="paragraph"><p>This form will use the first line matching the given
848 POSIX regex. If <em>&lt;start&gt;</em> is a regex, it will search from the end of
849 the previous <code>-L</code> range, if any, otherwise from the start of file.
850 If <em>&lt;start&gt;</em> is <code>^/regex/</code>, it will search from the start of file.
851 If <em>&lt;end&gt;</em> is a regex, it will search
852 starting at the line given by <em>&lt;start&gt;</em>.</p></div>
853 </li>
854 <li>
856 +offset or -offset
857 </p>
858 <div class="paragraph"><p>This is only valid for <em>&lt;end&gt;</em> and will specify a number
859 of lines before or after the line given by <em>&lt;start&gt;</em>.</p></div>
860 </li>
861 </ul></div>
862 <div class="paragraph"><p>If <code>:&lt;funcname&gt;</code> is given in place of <em>&lt;start&gt;</em> and <em>&lt;end&gt;</em>, it is a
863 regular expression that denotes the range from the first funcname line
864 that matches <em>&lt;funcname&gt;</em>, up to the next funcname line. <code>:&lt;funcname&gt;</code>
865 searches from the end of the previous <code>-L</code> range, if any, otherwise
866 from the start of file. <code>^:&lt;funcname&gt;</code> searches from the start of
867 file. The function names are determined in the same way as <code>git diff</code>
868 works out patch hunk headers (see <em>Defining a custom hunk-header</em>
869 in <a href="gitattributes.html">gitattributes(5)</a>).</p></div>
870 </dd>
871 <dt class="hdlist1">
873 </dt>
874 <dd>
876 Show long rev (Default: off).
877 </p>
878 </dd>
879 <dt class="hdlist1">
881 </dt>
882 <dd>
884 Show raw timestamp (Default: off).
885 </p>
886 </dd>
887 <dt class="hdlist1">
888 -S &lt;revs-file&gt;
889 </dt>
890 <dd>
892 Use revisions from revs-file instead of calling <a href="git-rev-list.html">git-rev-list(1)</a>.
893 </p>
894 </dd>
895 <dt class="hdlist1">
896 --reverse &lt;rev&gt;..&lt;rev&gt;
897 </dt>
898 <dd>
900 Walk history forward instead of backward. Instead of showing
901 the revision in which a line appeared, this shows the last
902 revision in which a line has existed. This requires a range of
903 revision like START..END where the path to blame exists in
904 START. <code>git blame --reverse START</code> is taken as <code>git blame
905 --reverse START..HEAD</code> for convenience.
906 </p>
907 </dd>
908 <dt class="hdlist1">
909 --first-parent
910 </dt>
911 <dd>
913 Follow only the first parent commit upon seeing a merge
914 commit. This option can be used to determine when a line
915 was introduced to a particular integration branch, rather
916 than when it was introduced to the history overall.
917 </p>
918 </dd>
919 <dt class="hdlist1">
921 </dt>
922 <dt class="hdlist1">
923 --porcelain
924 </dt>
925 <dd>
927 Show in a format designed for machine consumption.
928 </p>
929 </dd>
930 <dt class="hdlist1">
931 --line-porcelain
932 </dt>
933 <dd>
935 Show the porcelain format, but output commit information for
936 each line, not just the first time a commit is referenced.
937 Implies --porcelain.
938 </p>
939 </dd>
940 <dt class="hdlist1">
941 --incremental
942 </dt>
943 <dd>
945 Show the result incrementally in a format designed for
946 machine consumption.
947 </p>
948 </dd>
949 <dt class="hdlist1">
950 --encoding=&lt;encoding&gt;
951 </dt>
952 <dd>
954 Specifies the encoding used to output author names
955 and commit summaries. Setting it to <code>none</code> makes blame
956 output unconverted data. For more information see the
957 discussion about encoding in the <a href="git-log.html">git-log(1)</a>
958 manual page.
959 </p>
960 </dd>
961 <dt class="hdlist1">
962 --contents &lt;file&gt;
963 </dt>
964 <dd>
966 Annotate using the contents from the named file, starting from &lt;rev&gt;
967 if it is specified, and HEAD otherwise. You may specify <em>-</em> to make
968 the command read from the standard input for the file contents.
969 </p>
970 </dd>
971 <dt class="hdlist1">
972 --date &lt;format&gt;
973 </dt>
974 <dd>
976 Specifies the format used to output dates. If --date is not
977 provided, the value of the blame.date config variable is
978 used. If the blame.date config variable is also not set, the
979 iso format is used. For supported values, see the discussion
980 of the --date option at <a href="git-log.html">git-log(1)</a>.
981 </p>
982 </dd>
983 <dt class="hdlist1">
984 --[no-]progress
985 </dt>
986 <dd>
988 Progress status is reported on the standard error stream
989 by default when it is attached to a terminal. This flag
990 enables progress reporting even if not attached to a
991 terminal. Can&#8217;t use <code>--progress</code> together with <code>--porcelain</code>
992 or <code>--incremental</code>.
993 </p>
994 </dd>
995 <dt class="hdlist1">
996 -M[&lt;num&gt;]
997 </dt>
998 <dd>
1000 Detect moved or copied lines within a file. When a commit
1001 moves or copies a block of lines (e.g. the original file
1002 has A and then B, and the commit changes it to B and then
1003 A), the traditional <em>blame</em> algorithm notices only half of
1004 the movement and typically blames the lines that were moved
1005 up (i.e. B) to the parent and assigns blame to the lines that
1006 were moved down (i.e. A) to the child commit. With this
1007 option, both groups of lines are blamed on the parent by
1008 running extra passes of inspection.
1009 </p>
1010 <div class="paragraph"><p>&lt;num&gt; is optional but it is the lower bound on the number of
1011 alphanumeric characters that Git must detect as moving/copying
1012 within a file for it to associate those lines with the parent
1013 commit. The default value is 20.</p></div>
1014 </dd>
1015 <dt class="hdlist1">
1016 -C[&lt;num&gt;]
1017 </dt>
1018 <dd>
1020 In addition to <code>-M</code>, detect lines moved or copied from other
1021 files that were modified in the same commit. This is
1022 useful when you reorganize your program and move code
1023 around across files. When this option is given twice,
1024 the command additionally looks for copies from other
1025 files in the commit that creates the file. When this
1026 option is given three times, the command additionally
1027 looks for copies from other files in any commit.
1028 </p>
1029 <div class="paragraph"><p>&lt;num&gt; is optional but it is the lower bound on the number of
1030 alphanumeric characters that Git must detect as moving/copying
1031 between files for it to associate those lines with the parent
1032 commit. And the default value is 40. If there are more than one
1033 <code>-C</code> options given, the &lt;num&gt; argument of the last <code>-C</code> will
1034 take effect.</p></div>
1035 </dd>
1036 <dt class="hdlist1">
1037 --ignore-rev &lt;rev&gt;
1038 </dt>
1039 <dd>
1041 Ignore changes made by the revision when assigning blame, as if the
1042 change never happened. Lines that were changed or added by an ignored
1043 commit will be blamed on the previous commit that changed that line or
1044 nearby lines. This option may be specified multiple times to ignore
1045 more than one revision. If the <code>blame.markIgnoredLines</code> config option
1046 is set, then lines that were changed by an ignored commit and attributed to
1047 another commit will be marked with a <code>?</code> in the blame output. If the
1048 <code>blame.markUnblamableLines</code> config option is set, then those lines touched
1049 by an ignored commit that we could not attribute to another revision are
1050 marked with a <em>*</em>.
1051 </p>
1052 </dd>
1053 <dt class="hdlist1">
1054 --ignore-revs-file &lt;file&gt;
1055 </dt>
1056 <dd>
1058 Ignore revisions listed in <code>file</code>, which must be in the same format as an
1059 <code>fsck.skipList</code>. This option may be repeated, and these files will be
1060 processed after any files specified with the <code>blame.ignoreRevsFile</code> config
1061 option. An empty file name, <code>""</code>, will clear the list of revs from
1062 previously processed files.
1063 </p>
1064 </dd>
1065 <dt class="hdlist1">
1066 --color-lines
1067 </dt>
1068 <dd>
1070 Color line annotations in the default format differently if they come from
1071 the same commit as the preceding line. This makes it easier to distinguish
1072 code blocks introduced by different commits. The color defaults to cyan and
1073 can be adjusted using the <code>color.blame.repeatedLines</code> config option.
1074 </p>
1075 </dd>
1076 <dt class="hdlist1">
1077 --color-by-age
1078 </dt>
1079 <dd>
1081 Color line annotations depending on the age of the line in the default format.
1082 The <code>color.blame.highlightRecent</code> config option controls what color is used for
1083 each range of age.
1084 </p>
1085 </dd>
1086 <dt class="hdlist1">
1088 </dt>
1089 <dd>
1091 Show help message.
1092 </p>
1093 </dd>
1094 <dt class="hdlist1">
1096 </dt>
1097 <dd>
1099 Use the same output mode as <a href="git-annotate.html">git-annotate(1)</a> (Default: off).
1100 </p>
1101 </dd>
1102 <dt class="hdlist1">
1103 --score-debug
1104 </dt>
1105 <dd>
1107 Include debugging information related to the movement of
1108 lines between files (see <code>-C</code>) and lines moved within a
1109 file (see <code>-M</code>). The first number listed is the score.
1110 This is the number of alphanumeric characters detected
1111 as having been moved between or within files. This must be above
1112 a certain threshold for <em>git blame</em> to consider those lines
1113 of code to have been moved.
1114 </p>
1115 </dd>
1116 <dt class="hdlist1">
1118 </dt>
1119 <dt class="hdlist1">
1120 --show-name
1121 </dt>
1122 <dd>
1124 Show the filename in the original commit. By default
1125 the filename is shown if there is any line that came from a
1126 file with a different name, due to rename detection.
1127 </p>
1128 </dd>
1129 <dt class="hdlist1">
1131 </dt>
1132 <dt class="hdlist1">
1133 --show-number
1134 </dt>
1135 <dd>
1137 Show the line number in the original commit (Default: off).
1138 </p>
1139 </dd>
1140 <dt class="hdlist1">
1142 </dt>
1143 <dd>
1145 Suppress the author name and timestamp from the output.
1146 </p>
1147 </dd>
1148 <dt class="hdlist1">
1150 </dt>
1151 <dt class="hdlist1">
1152 --show-email
1153 </dt>
1154 <dd>
1156 Show the author email instead of the author name (Default: off).
1157 This can also be controlled via the <code>blame.showEmail</code> config
1158 option.
1159 </p>
1160 </dd>
1161 <dt class="hdlist1">
1163 </dt>
1164 <dd>
1166 Ignore whitespace when comparing the parent&#8217;s version and
1167 the child&#8217;s to find where the lines came from.
1168 </p>
1169 </dd>
1170 <dt class="hdlist1">
1171 --abbrev=&lt;n&gt;
1172 </dt>
1173 <dd>
1175 Instead of using the default 7+1 hexadecimal digits as the
1176 abbreviated object name, use &lt;m&gt;+1 digits, where &lt;m&gt; is at
1177 least &lt;n&gt; but ensures the commit object names are unique.
1178 Note that 1 column
1179 is used for a caret to mark the boundary commit.
1180 </p>
1181 </dd>
1182 </dl></div>
1183 </div>
1184 </div>
1185 <div class="sect1">
1186 <h2 id="_the_default_format">THE DEFAULT FORMAT</h2>
1187 <div class="sectionbody">
1188 <div class="paragraph"><p>When neither <code>--porcelain</code> nor <code>--incremental</code> option is specified,
1189 <code>git blame</code> will output annotation for each line with:</p></div>
1190 <div class="ulist"><ul>
1191 <li>
1193 abbreviated object name for the commit the line came from;
1194 </p>
1195 </li>
1196 <li>
1198 author ident (by default the author name and date, unless <code>-s</code> or <code>-e</code>
1199 is specified); and
1200 </p>
1201 </li>
1202 <li>
1204 line number
1205 </p>
1206 </li>
1207 </ul></div>
1208 <div class="paragraph"><p>before the line contents.</p></div>
1209 </div>
1210 </div>
1211 <div class="sect1">
1212 <h2 id="_the_porcelain_format">THE PORCELAIN FORMAT</h2>
1213 <div class="sectionbody">
1214 <div class="paragraph"><p>In this format, each line is output after a header; the
1215 header at the minimum has the first line which has:</p></div>
1216 <div class="ulist"><ul>
1217 <li>
1219 40-byte SHA-1 of the commit the line is attributed to;
1220 </p>
1221 </li>
1222 <li>
1224 the line number of the line in the original file;
1225 </p>
1226 </li>
1227 <li>
1229 the line number of the line in the final file;
1230 </p>
1231 </li>
1232 <li>
1234 on a line that starts a group of lines from a different
1235 commit than the previous one, the number of lines in this
1236 group. On subsequent lines this field is absent.
1237 </p>
1238 </li>
1239 </ul></div>
1240 <div class="paragraph"><p>This header line is followed by the following information
1241 at least once for each commit:</p></div>
1242 <div class="ulist"><ul>
1243 <li>
1245 the author name ("author"), email ("author-mail"), time
1246 ("author-time"), and time zone ("author-tz"); similarly
1247 for committer.
1248 </p>
1249 </li>
1250 <li>
1252 the filename in the commit that the line is attributed to.
1253 </p>
1254 </li>
1255 <li>
1257 the first line of the commit log message ("summary").
1258 </p>
1259 </li>
1260 </ul></div>
1261 <div class="paragraph"><p>The contents of the actual line are output after the above
1262 header, prefixed by a TAB. This is to allow adding more
1263 header elements later.</p></div>
1264 <div class="paragraph"><p>The porcelain format generally suppresses commit information that has
1265 already been seen. For example, two lines that are blamed to the same
1266 commit will both be shown, but the details for that commit will be shown
1267 only once. This is more efficient, but may require more state be kept by
1268 the reader. The <code>--line-porcelain</code> option can be used to output full
1269 commit information for each line, allowing simpler (but less efficient)
1270 usage like:</p></div>
1271 <div class="literalblock">
1272 <div class="content">
1273 <pre><code># count the number of lines attributed to each author
1274 git blame --line-porcelain file |
1275 sed -n 's/^author //p' |
1276 sort | uniq -c | sort -rn</code></pre>
1277 </div></div>
1278 </div>
1279 </div>
1280 <div class="sect1">
1281 <h2 id="_specifying_ranges">SPECIFYING RANGES</h2>
1282 <div class="sectionbody">
1283 <div class="paragraph"><p>Unlike <em>git blame</em> and <em>git annotate</em> in older versions of git, the extent
1284 of the annotation can be limited to both line ranges and revision
1285 ranges. The <code>-L</code> option, which limits annotation to a range of lines, may be
1286 specified multiple times.</p></div>
1287 <div class="paragraph"><p>When you are interested in finding the origin for
1288 lines 40-60 for file <code>foo</code>, you can use the <code>-L</code> option like so
1289 (they mean the same thing&#8201;&#8212;&#8201;both ask for 21 lines starting at
1290 line 40):</p></div>
1291 <div class="literalblock">
1292 <div class="content">
1293 <pre><code>git blame -L 40,60 foo
1294 git blame -L 40,+21 foo</code></pre>
1295 </div></div>
1296 <div class="paragraph"><p>Also you can use a regular expression to specify the line range:</p></div>
1297 <div class="literalblock">
1298 <div class="content">
1299 <pre><code>git blame -L '/^sub hello {/,/^}$/' foo</code></pre>
1300 </div></div>
1301 <div class="paragraph"><p>which limits the annotation to the body of the <code>hello</code> subroutine.</p></div>
1302 <div class="paragraph"><p>When you are not interested in changes older than version
1303 v2.6.18, or changes older than 3 weeks, you can use revision
1304 range specifiers similar to <em>git rev-list</em>:</p></div>
1305 <div class="literalblock">
1306 <div class="content">
1307 <pre><code>git blame v2.6.18.. -- foo
1308 git blame --since=3.weeks -- foo</code></pre>
1309 </div></div>
1310 <div class="paragraph"><p>When revision range specifiers are used to limit the annotation,
1311 lines that have not changed since the range boundary (either the
1312 commit v2.6.18 or the most recent commit that is more than 3
1313 weeks old in the above example) are blamed for that range
1314 boundary commit.</p></div>
1315 <div class="paragraph"><p>A particularly useful way is to see if an added file has lines
1316 created by copy-and-paste from existing files. Sometimes this
1317 indicates that the developer was being sloppy and did not
1318 refactor the code properly. You can first find the commit that
1319 introduced the file with:</p></div>
1320 <div class="literalblock">
1321 <div class="content">
1322 <pre><code>git log --diff-filter=A --pretty=short -- foo</code></pre>
1323 </div></div>
1324 <div class="paragraph"><p>and then annotate the change between the commit and its
1325 parents, using <code>commit^!</code> notation:</p></div>
1326 <div class="literalblock">
1327 <div class="content">
1328 <pre><code>git blame -C -C -f $commit^! -- foo</code></pre>
1329 </div></div>
1330 </div>
1331 </div>
1332 <div class="sect1">
1333 <h2 id="_incremental_output">INCREMENTAL OUTPUT</h2>
1334 <div class="sectionbody">
1335 <div class="paragraph"><p>When called with <code>--incremental</code> option, the command outputs the
1336 result as it is built. The output generally will talk about
1337 lines touched by more recent commits first (i.e. the lines will
1338 be annotated out of order) and is meant to be used by
1339 interactive viewers.</p></div>
1340 <div class="paragraph"><p>The output format is similar to the Porcelain format, but it
1341 does not contain the actual lines from the file that is being
1342 annotated.</p></div>
1343 <div class="olist arabic"><ol class="arabic">
1344 <li>
1346 Each blame entry always starts with a line of:
1347 </p>
1348 <div class="literalblock">
1349 <div class="content">
1350 <pre><code>&lt;40-byte-hex-sha1&gt; &lt;sourceline&gt; &lt;resultline&gt; &lt;num-lines&gt;</code></pre>
1351 </div></div>
1352 <div class="paragraph"><p>Line numbers count from 1.</p></div>
1353 </li>
1354 <li>
1356 The first time that a commit shows up in the stream, it has various
1357 other information about it printed out with a one-word tag at the
1358 beginning of each line describing the extra commit information (author,
1359 email, committer, dates, summary, etc.).
1360 </p>
1361 </li>
1362 <li>
1364 Unlike the Porcelain format, the filename information is always
1365 given and terminates the entry:
1366 </p>
1367 <div class="literalblock">
1368 <div class="content">
1369 <pre><code>"filename" &lt;whitespace-quoted-filename-goes-here&gt;</code></pre>
1370 </div></div>
1371 <div class="paragraph"><p>and thus it is really quite easy to parse for some line- and word-oriented
1372 parser (which should be quite natural for most scripting languages).</p></div>
1373 <div class="admonitionblock">
1374 <table><tr>
1375 <td class="icon">
1376 <div class="title">Note</div>
1377 </td>
1378 <td class="content">For people who do parsing: to make it more robust, just ignore any
1379 lines between the first and last one ("&lt;sha1&gt;" and "filename" lines)
1380 where you do not recognize the tag words (or care about that particular
1381 one) at the beginning of the "extended information" lines. That way, if
1382 there is ever added information (like the commit encoding or extended
1383 commit commentary), a blame viewer will not care.</td>
1384 </tr></table>
1385 </div>
1386 </li>
1387 </ol></div>
1388 </div>
1389 </div>
1390 <div class="sect1">
1391 <h2 id="_mapping_authors">MAPPING AUTHORS</h2>
1392 <div class="sectionbody">
1393 <div class="paragraph"><p>See <a href="gitmailmap.html">gitmailmap(5)</a>.</p></div>
1394 </div>
1395 </div>
1396 <div class="sect1">
1397 <h2 id="_configuration">CONFIGURATION</h2>
1398 <div class="sectionbody">
1399 <div class="paragraph"><p>Everything below this line in this section is selectively included
1400 from the <a href="git-config.html">git-config(1)</a> documentation. The content is the same
1401 as what&#8217;s found there:</p></div>
1402 <div class="dlist"><dl>
1403 <dt class="hdlist1">
1404 blame.blankBoundary
1405 </dt>
1406 <dd>
1408 Show blank commit object name for boundary commits in
1409 <a href="git-blame.html">git-blame(1)</a>. This option defaults to false.
1410 </p>
1411 </dd>
1412 <dt class="hdlist1">
1413 blame.coloring
1414 </dt>
1415 <dd>
1417 This determines the coloring scheme to be applied to blame
1418 output. It can be <em>repeatedLines</em>, <em>highlightRecent</em>,
1419 or <em>none</em> which is the default.
1420 </p>
1421 </dd>
1422 <dt class="hdlist1">
1423 blame.date
1424 </dt>
1425 <dd>
1427 Specifies the format used to output dates in <a href="git-blame.html">git-blame(1)</a>.
1428 If unset the iso format is used. For supported values,
1429 see the discussion of the <code>--date</code> option at <a href="git-log.html">git-log(1)</a>.
1430 </p>
1431 </dd>
1432 <dt class="hdlist1">
1433 blame.showEmail
1434 </dt>
1435 <dd>
1437 Show the author email instead of author name in <a href="git-blame.html">git-blame(1)</a>.
1438 This option defaults to false.
1439 </p>
1440 </dd>
1441 <dt class="hdlist1">
1442 blame.showRoot
1443 </dt>
1444 <dd>
1446 Do not treat root commits as boundaries in <a href="git-blame.html">git-blame(1)</a>.
1447 This option defaults to false.
1448 </p>
1449 </dd>
1450 <dt class="hdlist1">
1451 blame.ignoreRevsFile
1452 </dt>
1453 <dd>
1455 Ignore revisions listed in the file, one unabbreviated object name per
1456 line, in <a href="git-blame.html">git-blame(1)</a>. Whitespace and comments beginning with
1457 <code>#</code> are ignored. This option may be repeated multiple times. Empty
1458 file names will reset the list of ignored revisions. This option will
1459 be handled before the command line option <code>--ignore-revs-file</code>.
1460 </p>
1461 </dd>
1462 <dt class="hdlist1">
1463 blame.markUnblamableLines
1464 </dt>
1465 <dd>
1467 Mark lines that were changed by an ignored revision that we could not
1468 attribute to another commit with a <em>*</em> in the output of
1469 <a href="git-blame.html">git-blame(1)</a>.
1470 </p>
1471 </dd>
1472 <dt class="hdlist1">
1473 blame.markIgnoredLines
1474 </dt>
1475 <dd>
1477 Mark lines that were changed by an ignored revision that we attributed to
1478 another commit with a <em>?</em> in the output of <a href="git-blame.html">git-blame(1)</a>.
1479 </p>
1480 </dd>
1481 </dl></div>
1482 </div>
1483 </div>
1484 <div class="sect1">
1485 <h2 id="_see_also">SEE ALSO</h2>
1486 <div class="sectionbody">
1487 <div class="paragraph"><p><a href="git-annotate.html">git-annotate(1)</a></p></div>
1488 </div>
1489 </div>
1490 <div class="sect1">
1491 <h2 id="_git">GIT</h2>
1492 <div class="sectionbody">
1493 <div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
1494 </div>
1495 </div>
1496 </div>
1497 <div id="footnotes"><hr /></div>
1498 <div id="footer">
1499 <div id="footer-text">
1500 Last updated
1501 2024-02-08 15:45:59 PST
1502 </div>
1503 </div>
1504 </body>
1505 </html>