2 <html xmlns=
"http://www.w3.org/1999/xhtml" lang=
"en">
4 <meta charset=
"UTF-8"/>
5 <meta http-equiv=
"X-UA-Compatible" content=
"IE=edge"/>
6 <meta name=
"viewport" content=
"width=device-width, initial-scale=1.0"/>
7 <meta name=
"generator" content=
"Asciidoctor 2.0.20"/>
8 <title>git-blame(
1)
</title>
9 <link rel=
"stylesheet" href=
"https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"/>
11 /*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
12 /* Uncomment the following line when using as a custom stylesheet */
13 /* @import
"https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
14 html{font-family:sans-serif;-webkit-text-size-adjust:
100%}
16 a:focus{outline:thin dotted}
17 a:active,a:hover{outline:
0}
18 h1{font-size:
2em;margin:
.67em
0}
19 b,strong{font-weight:bold}
21 abbr[title]{cursor:help;border-bottom:
1px dotted #dddddf;text-decoration:none}
22 dfn{font-style:italic}
24 mark{background:#ff0;color:#
000}
25 code,kbd,pre,samp{font-family:monospace;font-size:
1em}
26 pre{white-space:pre-wrap}
27 q{quotes:
"\201C" "\201D" "\2018" "\2019"}
29 sub,sup{font-size:
75%;line-height:
0;position:relative;vertical-align:baseline}
33 svg:not(:root){overflow:hidden}
35 audio,video{display:inline-block}
36 audio:not([controls]){display:none;height:
0}
37 fieldset{border:
1px solid silver;margin:
0 2px;padding:
.35em
.625em
.75em}
38 legend{border:
0;padding:
0}
39 button,input,select,textarea{font-family:inherit;font-size:
100%;margin:
0}
40 button,input{line-height:normal}
41 button,select{text-transform:none}
42 button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
43 button[disabled],html input[disabled]{cursor:default}
44 input[type=checkbox],input[type=radio]{padding:
0}
45 button::-moz-focus-inner,input::-moz-focus-inner{border:
0;padding:
0}
46 textarea{overflow:auto;vertical-align:top}
47 table{border-collapse:collapse;border-spacing:
0}
48 *,::before,::after{box-sizing:border-box}
49 html,body{font-size:
100%}
50 body{background:#fff;color:rgba(
0,
0,
0,
.8);padding:
0;margin:
0;font-family:
"Noto Serif",
"DejaVu Serif",serif;line-height:
1;position:relative;cursor:auto;-moz-tab-size:
4;-o-tab-size:
4;tab-size:
4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
51 a:hover{cursor:pointer}
52 img,object,embed{max-width:
100%;height:auto}
53 object,embed{height:
100%}
54 img{-ms-interpolation-mode:bicubic}
55 .left{float:left!important}
56 .right{float:right!important}
57 .text-left{text-align:left!important}
58 .text-right{text-align:right!important}
59 .text-center{text-align:center!important}
60 .text-justify{text-align:justify!important}
62 img,object,svg{display:inline-block;vertical-align:middle}
63 textarea{height:auto;min-height:
50px}
65 .subheader,.admonitionblock td.content
>.title,.audioblock
>.title,.exampleblock
>.title,.imageblock
>.title,.listingblock
>.title,.literalblock
>.title,.stemblock
>.title,.openblock
>.title,.paragraph
>.title,.quoteblock
>.title,table.tableblock
>.title,.verseblock
>.title,.videoblock
>.title,.dlist
>.title,.olist
>.title,.ulist
>.title,.qlist
>.title,.hdlist
>.title{line-height:
1.45;color:#
7a2518;font-weight:
400;margin-top:
0;margin-bottom:
.25em}
66 div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock
>.content
>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:
0;padding:
0}
67 a{color:#
2156a5;text-decoration:underline;line-height:inherit}
68 a:hover,a:focus{color:#
1d4b8f}
70 p{line-height:
1.6;margin-bottom:
1.25em;text-rendering:optimizeLegibility}
71 p aside{font-size:
.875em;line-height:
1.35;font-style:italic}
72 h1,h2,h3,#toctitle,.sidebarblock
>.content
>.title,h4,h5,h6{font-family:
"Open Sans",
"DejaVu Sans",sans-serif;font-weight:
300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:
1em;margin-bottom:
.5em;line-height:
1.0125em}
73 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock
>.content
>.title small,h4 small,h5 small,h6 small{font-size:
60%;color:#e99b8f;line-height:
0}
75 h2{font-size:
1.6875em}
76 h3,#toctitle,.sidebarblock
>.content
>.title{font-size:
1.375em}
77 h4,h5{font-size:
1.125em}
79 hr{border:solid #dddddf;border-width:
1px
0 0;clear:both;margin:
1.25em
0 1.1875em}
80 em,i{font-style:italic;line-height:inherit}
81 strong,b{font-weight:bold;line-height:inherit}
82 small{font-size:
60%;line-height:inherit}
83 code{font-family:
"Droid Sans Mono",
"DejaVu Sans Mono",monospace;font-weight:
400;color:rgba(
0,
0,
0,
.9)}
84 ul,ol,dl{line-height:
1.6;margin-bottom:
1.25em;list-style-position:outside;font-family:inherit}
85 ul,ol{margin-left:
1.5em}
86 ul li ul,ul li ol{margin-left:
1.25em;margin-bottom:
0}
87 ul.circle{list-style-type:circle}
88 ul.disc{list-style-type:disc}
89 ul.square{list-style-type:square}
90 ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
91 ol li ul,ol li ol{margin-left:
1.25em;margin-bottom:
0}
92 dl dt{margin-bottom:
.3125em;font-weight:bold}
93 dl dd{margin-bottom:
1.25em}
94 blockquote{margin:
0 0 1.25em;padding:
.5625em
1.25em
0 1.1875em;border-left:
1px solid #ddd}
95 blockquote,blockquote p{line-height:
1.6;color:rgba(
0,
0,
0,
.85)}
96 @media screen and (min-width:
768px){h1,h2,h3,#toctitle,.sidebarblock
>.content
>.title,h4,h5,h6{line-height:
1.2}
98 h2{font-size:
2.3125em}
99 h3,#toctitle,.sidebarblock
>.content
>.title{font-size:
1.6875em}
100 h4{font-size:
1.4375em}}
101 table{background:#fff;margin-bottom:
1.25em;border:
1px solid #dedede;word-wrap:normal}
102 table thead,table tfoot{background:#f7f8f7}
103 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:
.5em
.625em
.625em;font-size:inherit;color:rgba(
0,
0,
0,
.8);text-align:left}
104 table tr th,table tr td{padding:
.5625em
.625em;font-size:inherit;color:rgba(
0,
0,
0,
.8)}
105 table tr.even,table tr.alt{background:#f8f8f7}
106 table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:
1.6}
107 h1,h2,h3,#toctitle,.sidebarblock
>.content
>.title,h4,h5,h6{line-height:
1.2;word-spacing:-
.05em}
108 h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock
>.content
>.title strong,h4 strong,h5 strong,h6 strong{font-weight:
400}
109 .center{margin-left:auto;margin-right:auto}
111 .clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:
" ";display:table}
112 .clearfix::after,.float-group::after{clear:both}
113 :not(pre).nobreak{word-wrap:normal}
114 :not(pre).nowrap{white-space:nowrap}
115 :not(pre).pre-wrap{white-space:pre-wrap}
116 :not(pre):not([class^=L])
>code{font-size:
.9375em;font-style:normal!important;letter-spacing:
0;padding:
.1em
.5ex;word-spacing:-
.15em;background:#f7f7f8;border-radius:
4px;line-height:
1.45;text-rendering:optimizeSpeed}
117 pre{color:rgba(
0,
0,
0,
.9);font-family:
"Droid Sans Mono",
"DejaVu Sans Mono",monospace;line-height:
1.45;text-rendering:optimizeSpeed}
118 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
119 pre
>code{display:block}
120 pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
121 em em{font-style:normal}
122 strong strong{font-weight:
400}
123 .keyseq{color:rgba(
51,
51,
51,
.8)}
124 kbd{font-family:
"Droid Sans Mono",
"DejaVu Sans Mono",monospace;display:inline-block;color:rgba(
0,
0,
0,
.8);font-size:
.65em;line-height:
1.45;background:#f7f7f7;border:
1px solid #ccc;border-radius:
3px;box-shadow:
0 1px
0 rgba(
0,
0,
0,
.2),inset
0 0 0 .1em #fff;margin:
0 .15em;padding:
.2em
.5em;vertical-align:middle;position:relative;top:-
.1em;white-space:nowrap}
125 .keyseq kbd:first-child{margin-left:
0}
126 .keyseq kbd:last-child{margin-right:
0}
127 .menuseq,.menuref{color:#
000}
128 .menuseq b:not(.caret),.menuref{font-weight:inherit}
129 .menuseq{word-spacing:-
.02em}
130 .menuseq b.caret{font-size:
1.25em;line-height:
.8}
131 .menuseq i.caret{font-weight:bold;text-align:center;width:
.45em}
132 b.button::before,b.button::after{position:relative;top:-
1px;font-weight:
400}
133 b.button::before{content:
"[";padding:
0 3px
0 2px}
134 b.button::after{content:
"]";padding:
0 2px
0 3px}
135 p a
>code:hover{color:rgba(
0,
0,
0,
.9)}
136 #header,#content,#footnotes,#footer{width:
100%;margin:
0 auto;max-width:
62.5em;*zoom:
1;position:relative;padding-left:
.9375em;padding-right:
.9375em}
137 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:
" ";display:table}
138 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
139 #content{margin-top:
1.25em}
140 #content::before{content:none}
141 #header
>h1:first-child{color:rgba(
0,
0,
0,
.85);margin-top:
2.25rem;margin-bottom:
0}
142 #header
>h1:first-child+#toc{margin-top:
8px;border-top:
1px solid #dddddf}
143 #header
>h1:only-child,body.toc2 #header
>h1:nth-last-child(
2){border-bottom:
1px solid #dddddf;padding-bottom:
8px}
144 #header .details{border-bottom:
1px solid #dddddf;line-height:
1.45;padding-top:
.25em;padding-bottom:
.25em;padding-left:
.25em;color:rgba(
0,
0,
0,
.6);display:flex;flex-flow:row wrap}
145 #header .details span:first-child{margin-left:-
.125em}
146 #header .details span.email a{color:rgba(
0,
0,
0,
.85)}
147 #header .details br{display:none}
148 #header .details br+span::before{content:
"\00a0\2013\00a0"}
149 #header .details br+span.author::before{content:
"\00a0\22c5\00a0";color:rgba(
0,
0,
0,
.85)}
150 #header .details br+span#revremark::before{content:
"\00a0|\00a0"}
151 #header #revnumber{text-transform:capitalize}
152 #header #revnumber::after{content:
"\00a0"}
153 #content
>h1:first-child:not([class]){color:rgba(
0,
0,
0,
.85);border-bottom:
1px solid #dddddf;padding-bottom:
8px;margin-top:
0;padding-top:
1rem;margin-bottom:
1.25rem}
154 #toc{border-bottom:
1px solid #e7e7e9;padding-bottom:
.5em}
155 #toc
>ul{margin-left:
.125em}
156 #toc ul.sectlevel0
>li
>a{font-style:italic}
157 #toc ul.sectlevel0 ul.sectlevel1{margin:
.5em
0}
158 #toc ul{font-family:
"Open Sans",
"DejaVu Sans",sans-serif;list-style-type:none}
159 #toc li{line-height:
1.3334;margin-top:
.3334em}
160 #toc a{text-decoration:none}
161 #toc a:active{text-decoration:underline}
162 #toctitle{color:#
7a2518;font-size:
1.2em}
163 @media screen and (min-width:
768px){#toctitle{font-size:
1.375em}
164 body.toc2{padding-left:
15em;padding-right:
0}
165 #toc.toc2{margin-top:
0!important;background:#f8f8f7;position:fixed;width:
15em;left:
0;top:
0;border-right:
1px solid #e7e7e9;border-top-width:
0!important;border-bottom-width:
0!important;z-index:
1000;padding:
1.25em
1em;height:
100%;overflow:auto}
166 #toc.toc2 #toctitle{margin-top:
0;margin-bottom:
.8rem;font-size:
1.2em}
167 #toc.toc2
>ul{font-size:
.9em;margin-bottom:
0}
168 #toc.toc2 ul ul{margin-left:
0;padding-left:
1em}
169 #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:
0;margin-top:
.5em;margin-bottom:
.5em}
170 body.toc2.toc-right{padding-left:
0;padding-right:
15em}
171 body.toc2.toc-right #toc.toc2{border-right-width:
0;border-left:
1px solid #e7e7e9;left:auto;right:
0}}
172 @media screen and (min-width:
1280px){body.toc2{padding-left:
20em;padding-right:
0}
173 #toc.toc2{width:
20em}
174 #toc.toc2 #toctitle{font-size:
1.375em}
175 #toc.toc2
>ul{font-size:
.95em}
176 #toc.toc2 ul ul{padding-left:
1.25em}
177 body.toc2.toc-right{padding-left:
0;padding-right:
20em}}
178 #content #toc{border:
1px solid #e0e0dc;margin-bottom:
1.25em;padding:
1.25em;background:#f8f8f7;border-radius:
4px}
179 #content #toc
>:first-child{margin-top:
0}
180 #content #toc
>:last-child{margin-bottom:
0}
181 #footer{max-width:none;background:rgba(
0,
0,
0,
.8);padding:
1.25em}
182 #footer-text{color:hsla(
0,
0%,
100%,
.8);line-height:
1.44}
183 #content{margin-bottom:
.625em}
184 .sect1{padding-bottom:
.625em}
185 @media screen and (min-width:
768px){#content{margin-bottom:
1.25em}
186 .sect1{padding-bottom:
1.25em}}
187 .sect1:last-child{padding-bottom:
0}
188 .sect1+.sect1{border-top:
1px solid #e7e7e9}
189 #content h1
>a.anchor,h2
>a.anchor,h3
>a.anchor,#toctitle
>a.anchor,.sidebarblock
>.content
>.title
>a.anchor,h4
>a.anchor,h5
>a.anchor,h6
>a.anchor{position:absolute;z-index:
1001;width:
1.5ex;margin-left:-
1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:
400}
190 #content h1
>a.anchor::before,h2
>a.anchor::before,h3
>a.anchor::before,#toctitle
>a.anchor::before,.sidebarblock
>.content
>.title
>a.anchor::before,h4
>a.anchor::before,h5
>a.anchor::before,h6
>a.anchor::before{content:
"\00A7";font-size:
.85em;display:block;padding-top:
.1em}
191 #content h1:hover
>a.anchor,#content h1
>a.anchor:hover,h2:hover
>a.anchor,h2
>a.anchor:hover,h3:hover
>a.anchor,#toctitle:hover
>a.anchor,.sidebarblock
>.content
>.title:hover
>a.anchor,h3
>a.anchor:hover,#toctitle
>a.anchor:hover,.sidebarblock
>.content
>.title
>a.anchor:hover,h4:hover
>a.anchor,h4
>a.anchor:hover,h5:hover
>a.anchor,h5
>a.anchor:hover,h6:hover
>a.anchor,h6
>a.anchor:hover{visibility:visible}
192 #content h1
>a.link,h2
>a.link,h3
>a.link,#toctitle
>a.link,.sidebarblock
>.content
>.title
>a.link,h4
>a.link,h5
>a.link,h6
>a.link{color:#ba3925;text-decoration:none}
193 #content h1
>a.link:hover,h2
>a.link:hover,h3
>a.link:hover,#toctitle
>a.link:hover,.sidebarblock
>.content
>.title
>a.link:hover,h4
>a.link:hover,h5
>a.link:hover,h6
>a.link:hover{color:#a53221}
194 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:
1.25em}
195 details{margin-left:
1.25rem}
196 details
>summary{cursor:pointer;display:block;position:relative;line-height:
1.6;margin-bottom:
.625rem;outline:none;-webkit-tap-highlight-color:transparent}
197 details
>summary::-webkit-details-marker{display:none}
198 details
>summary::before{content:
"";border:solid transparent;border-left:solid;border-width:
.3em
0 .3em
.5em;position:absolute;top:
.5em;left:-
1.25rem;transform:translateX(
15%)}
199 details[open]
>summary::before{border:solid transparent;border-top:solid;border-width:
.5em
.3em
0;transform:translateY(
15%)}
200 details
>summary::after{content:
"";width:
1.25rem;height:
1em;position:absolute;top:
.3em;left:-
1.25rem}
201 .admonitionblock td.content
>.title,.audioblock
>.title,.exampleblock
>.title,.imageblock
>.title,.listingblock
>.title,.literalblock
>.title,.stemblock
>.title,.openblock
>.title,.paragraph
>.title,.quoteblock
>.title,table.tableblock
>.title,.verseblock
>.title,.videoblock
>.title,.dlist
>.title,.olist
>.title,.ulist
>.title,.qlist
>.title,.hdlist
>.title{text-rendering:optimizeLegibility;text-align:left;font-family:
"Noto Serif",
"DejaVu Serif",serif;font-size:
1rem;font-style:italic}
202 table.tableblock.fit-content
>caption.title{white-space:nowrap;width:
0}
203 .paragraph.lead
>p,#preamble
>.sectionbody
>[class=paragraph]:first-of-type p{font-size:
1.21875em;line-height:
1.6;color:rgba(
0,
0,
0,
.85)}
204 .admonitionblock
>table{border-collapse:separate;border:
0;background:none;width:
100%}
205 .admonitionblock
>table td.icon{text-align:center;width:
80px}
206 .admonitionblock
>table td.icon img{max-width:none}
207 .admonitionblock
>table td.icon .title{font-weight:bold;font-family:
"Open Sans",
"DejaVu Sans",sans-serif;text-transform:uppercase}
208 .admonitionblock
>table td.content{padding-left:
1.125em;padding-right:
1.25em;border-left:
1px solid #dddddf;color:rgba(
0,
0,
0,
.6);word-wrap:anywhere}
209 .admonitionblock
>table td.content
>:last-child
>:last-child{margin-bottom:
0}
210 .exampleblock
>.content{border:
1px solid #e6e6e6;margin-bottom:
1.25em;padding:
1.25em;background:#fff;border-radius:
4px}
211 .sidebarblock{border:
1px solid #dbdbd6;margin-bottom:
1.25em;padding:
1.25em;background:#f3f3f2;border-radius:
4px}
212 .sidebarblock
>.content
>.title{color:#
7a2518;margin-top:
0;text-align:center}
213 .exampleblock
>.content
>:first-child,.sidebarblock
>.content
>:first-child{margin-top:
0}
214 .exampleblock
>.content
>:last-child,.exampleblock
>.content
>:last-child
>:last-child,.exampleblock
>.content .olist
>ol
>li:last-child
>:last-child,.exampleblock
>.content .ulist
>ul
>li:last-child
>:last-child,.exampleblock
>.content .qlist
>ol
>li:last-child
>:last-child,.sidebarblock
>.content
>:last-child,.sidebarblock
>.content
>:last-child
>:last-child,.sidebarblock
>.content .olist
>ol
>li:last-child
>:last-child,.sidebarblock
>.content .ulist
>ul
>li:last-child
>:last-child,.sidebarblock
>.content .qlist
>ol
>li:last-child
>:last-child{margin-bottom:
0}
215 .literalblock pre,.listingblock
>.content
>pre{border-radius:
4px;overflow-x:auto;padding:
1em;font-size:
.8125em}
216 @media screen and (min-width:
768px){.literalblock pre,.listingblock
>.content
>pre{font-size:
.90625em}}
217 @media screen and (min-width:
1280px){.literalblock pre,.listingblock
>.content
>pre{font-size:
1em}}
218 .literalblock pre,.listingblock
>.content
>pre:not(.highlight),.listingblock
>.content
>pre[class=highlight],.listingblock
>.content
>pre[class^=
"highlight "]{background:#f7f7f8}
219 .literalblock.output pre{color:#f7f7f8;background:rgba(
0,
0,
0,
.9)}
220 .listingblock
>.content{position:relative}
221 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:
.75em;top:
.425rem;right:
.5rem;line-height:
1;text-transform:uppercase;color:inherit;opacity:
.5}
222 .listingblock:hover code[data-lang]::before{display:block}
223 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:
.5em;color:inherit;opacity:
.5}
224 .listingblock.terminal pre .command:not([data-prompt])::before{content:
"$"}
225 .listingblock pre.highlightjs{padding:
0}
226 .listingblock pre.highlightjs
>code{padding:
1em;border-radius:
4px}
227 .listingblock pre.prettyprint{border-width:
0}
228 .prettyprint{background:#f7f7f8}
229 pre.prettyprint .linenums{line-height:
1.45;margin-left:
2em}
230 pre.prettyprint li{background:none;list-style-type:inherit;padding-left:
0}
231 pre.prettyprint li code[data-lang]::before{opacity:
1}
232 pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
233 table.linenotable{border-collapse:separate;border:
0;margin-bottom:
0;background:none}
234 table.linenotable td[class]{color:inherit;vertical-align:top;padding:
0;line-height:inherit;white-space:normal}
235 table.linenotable td.code{padding-left:
.75em}
236 table.linenotable td.linenos,pre.pygments .linenos{border-right:
1px solid;opacity:
.35;padding-right:
.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
237 pre.pygments span.linenos{display:inline-block;margin-right:
.75em}
238 .quoteblock{margin:
0 1em
1.25em
1.5em;display:table}
239 .quoteblock:not(.excerpt)
>.title{margin-left:-
1.5em;margin-bottom:
.75em}
240 .quoteblock blockquote,.quoteblock p{color:rgba(
0,
0,
0,
.85);font-size:
1.15rem;line-height:
1.75;word-spacing:
.1em;letter-spacing:
0;font-style:italic;text-align:justify}
241 .quoteblock blockquote{margin:
0;padding:
0;border:
0}
242 .quoteblock blockquote::before{content:
"\201c";float:left;font-size:
2.75em;font-weight:bold;line-height:
.6em;margin-left:-
.6em;color:#
7a2518;text-shadow:
0 1px
2px rgba(
0,
0,
0,
.1)}
243 .quoteblock blockquote
>.paragraph:last-child p{margin-bottom:
0}
244 .quoteblock .attribution{margin-top:
.75em;margin-right:
.5ex;text-align:right}
245 .verseblock{margin:
0 1em
1.25em}
246 .verseblock pre{font-family:
"Open Sans",
"DejaVu Sans",sans-serif;font-size:
1.15rem;color:rgba(
0,
0,
0,
.85);font-weight:
300;text-rendering:optimizeLegibility}
247 .verseblock pre strong{font-weight:
400}
248 .verseblock .attribution{margin-top:
1.25rem;margin-left:
.5ex}
249 .quoteblock .attribution,.verseblock .attribution{font-size:
.9375em;line-height:
1.45;font-style:italic}
250 .quoteblock .attribution br,.verseblock .attribution br{display:none}
251 .quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-
.025em;color:rgba(
0,
0,
0,
.6)}
252 .quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
253 .quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:
1.6;word-spacing:
0}
254 .quoteblock.abstract{margin:
0 1em
1.25em;display:block}
255 .quoteblock.abstract
>.title{margin:
0 0 .375em;font-size:
1.15em;text-align:center}
256 .quoteblock.excerpt
>blockquote,.quoteblock .quoteblock{padding:
0 0 .25em
1em;border-left:
.25em solid #dddddf}
257 .quoteblock.excerpt,.quoteblock .quoteblock{margin-left:
0}
258 .quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:
1.0625rem}
259 .quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:
.85rem;text-align:left;margin-right:
0}
260 p.tableblock:last-child{margin-bottom:
0}
261 td.tableblock
>.content{margin-bottom:
1.25em;word-wrap:anywhere}
262 td.tableblock
>.content
>:last-child{margin-bottom:-
1.25em}
263 table.tableblock,th.tableblock,td.tableblock{border:
0 solid #dedede}
264 table.grid-all
>*
>tr
>*{border-width:
1px}
265 table.grid-cols
>*
>tr
>*{border-width:
0 1px}
266 table.grid-rows
>*
>tr
>*{border-width:
1px
0}
267 table.frame-all{border-width:
1px}
268 table.frame-ends{border-width:
1px
0}
269 table.frame-sides{border-width:
0 1px}
270 table.frame-none
>colgroup+*
>:first-child
>*,table.frame-sides
>colgroup+*
>:first-child
>*{border-top-width:
0}
271 table.frame-none
>:last-child
>:last-child
>*,table.frame-sides
>:last-child
>:last-child
>*{border-bottom-width:
0}
272 table.frame-none
>*
>tr
>:first-child,table.frame-ends
>*
>tr
>:first-child{border-left-width:
0}
273 table.frame-none
>*
>tr
>:last-child,table.frame-ends
>*
>tr
>:last-child{border-right-width:
0}
274 table.stripes-all
>*
>tr,table.stripes-odd
>*
>tr:nth-of-type(odd),table.stripes-even
>*
>tr:nth-of-type(even),table.stripes-hover
>*
>tr:hover{background:#f8f8f7}
275 th.halign-left,td.halign-left{text-align:left}
276 th.halign-right,td.halign-right{text-align:right}
277 th.halign-center,td.halign-center{text-align:center}
278 th.valign-top,td.valign-top{vertical-align:top}
279 th.valign-bottom,td.valign-bottom{vertical-align:bottom}
280 th.valign-middle,td.valign-middle{vertical-align:middle}
281 table thead th,table tfoot th{font-weight:bold}
282 tbody tr th{background:#f7f8f7}
283 tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(
0,
0,
0,
.8);font-weight:bold}
284 p.tableblock
>code:only-child{background:none;padding:
0}
285 p.tableblock{font-size:
1em}
286 ol{margin-left:
1.75em}
287 ul li ol{margin-left:
1.5em}
288 dl dd{margin-left:
1.125em}
289 dl dd:last-child,dl dd:last-child
>:last-child{margin-bottom:
0}
290 li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:
.625em}
291 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
292 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:
.625em}
293 ul.unstyled,ol.unstyled{margin-left:
0}
294 li
>p:empty:only-child::before{content:
"";display:inline-block}
295 ul.checklist
>li
>p:first-child{margin-left:-
1em}
296 ul.checklist
>li
>p:first-child
>.fa-square-o:first-child,ul.checklist
>li
>p:first-child
>.fa-check-square-o:first-child{width:
1.25em;font-size:
.8em;position:relative;bottom:
.125em}
297 ul.checklist
>li
>p:first-child
>input[type=checkbox]:first-child{margin-right:
.25em}
298 ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:
0 0 .625em -
1.25em}
299 ul.inline
>li{margin-left:
1.25em}
300 .unstyled dl dt{font-weight:
400;font-style:normal}
301 ol.arabic{list-style-type:decimal}
302 ol.decimal{list-style-type:decimal-leading-zero}
303 ol.loweralpha{list-style-type:lower-alpha}
304 ol.upperalpha{list-style-type:upper-alpha}
305 ol.lowerroman{list-style-type:lower-roman}
306 ol.upperroman{list-style-type:upper-roman}
307 ol.lowergreek{list-style-type:lower-greek}
308 .hdlist
>table,.colist
>table{border:
0;background:none}
309 .hdlist
>table
>tbody
>tr,.colist
>table
>tbody
>tr{background:none}
310 td.hdlist1,td.hdlist2{vertical-align:top;padding:
0 .625em}
311 td.hdlist1{font-weight:bold;padding-bottom:
1.25em}
312 td.hdlist2{word-wrap:anywhere}
313 .literalblock+.colist,.listingblock+.colist{margin-top:-
.5em}
314 .colist td:not([class]):first-child{padding:
.4em
.75em
0;line-height:
1;vertical-align:top}
315 .colist td:not([class]):first-child img{max-width:none}
316 .colist td:not([class]):last-child{padding:
.25em
0}
317 .thumb,.th{line-height:
0;display:inline-block;border:
4px solid #fff;box-shadow:
0 0 0 1px #ddd}
318 .imageblock.left{margin:
.25em
.625em
1.25em
0}
319 .imageblock.right{margin:
.25em
0 1.25em
.625em}
320 .imageblock
>.title{margin-bottom:
0}
321 .imageblock.thumb,.imageblock.th{border-width:
6px}
322 .imageblock.thumb
>.title,.imageblock.th
>.title{padding:
0 .125em}
323 .image.left,.image.right{margin-top:
.25em;margin-bottom:
.25em;display:inline-block;line-height:
0}
324 .image.left{margin-right:
.625em}
325 .image.right{margin-left:
.625em}
326 a.image{text-decoration:none;display:inline-block}
327 a.image object{pointer-events:none}
328 sup.footnote,sup.footnoteref{font-size:
.875em;position:static;vertical-align:super}
329 sup.footnote a,sup.footnoteref a{text-decoration:none}
330 sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
331 #footnotes{padding-top:
.75em;padding-bottom:
.75em;margin-bottom:
.625em}
332 #footnotes hr{width:
20%;min-width:
6.25em;margin:-
.25em
0 .75em;border-width:
1px
0 0}
333 #footnotes .footnote{padding:
0 .375em
0 .225em;line-height:
1.3334;font-size:
.875em;margin-left:
1.2em;margin-bottom:
.2em}
334 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-
1.05em}
335 #footnotes .footnote:last-of-type{margin-bottom:
0}
336 #content #footnotes{margin-top:-
.625em;margin-bottom:
0;padding:
.75em
0}
337 div.unbreakable{page-break-inside:avoid}
338 .big{font-size:larger}
339 .small{font-size:smaller}
340 .underline{text-decoration:underline}
341 .overline{text-decoration:overline}
342 .line-through{text-decoration:line-through}
344 .aqua-background{background:#
00fafa}
346 .black-background{background:#
000}
348 .blue-background{background:#
0000fa}
349 .fuchsia{color:#bf00bf}
350 .fuchsia-background{background:#fa00fa}
352 .gray-background{background:#
7d7d7d}
353 .green{color:#
006000}
354 .green-background{background:#
007d00}
356 .lime-background{background:#
00fa00}
357 .maroon{color:#
600000}
358 .maroon-background{background:#
7d0000}
360 .navy-background{background:#
00007d}
361 .olive{color:#
606000}
362 .olive-background{background:#
7d7d00}
363 .purple{color:#
600060}
364 .purple-background{background:#
7d007d}
366 .red-background{background:#fa0000}
367 .silver{color:#
909090}
368 .silver-background{background:#bcbcbc}
370 .teal-background{background:#
007d7d}
371 .white{color:#bfbfbf}
372 .white-background{background:#fafafa}
373 .yellow{color:#bfbf00}
374 .yellow-background{background:#fafa00}
375 span.icon
>.fa{cursor:default}
376 a span.icon
>.fa{cursor:inherit}
377 .admonitionblock td.icon [class^=
"fa icon-"]{font-size:
2.5em;text-shadow:
1px
1px
2px rgba(
0,
0,
0,
.5);cursor:default}
378 .admonitionblock td.icon .icon-note::before{content:
"\f05a";color:#
19407c}
379 .admonitionblock td.icon .icon-tip::before{content:
"\f0eb";text-shadow:
1px
1px
2px rgba(
155,
155,
0,
.8);color:#
111}
380 .admonitionblock td.icon .icon-warning::before{content:
"\f071";color:#bf6900}
381 .admonitionblock td.icon .icon-caution::before{content:
"\f06d";color:#bf3400}
382 .admonitionblock td.icon .icon-important::before{content:
"\f06a";color:#bf0000}
383 .conum[data-value]{display:inline-block;color:#fff!important;background:rgba(
0,
0,
0,
.8);border-radius:
50%;text-align:center;font-size:
.75em;width:
1.67em;height:
1.67em;line-height:
1.67em;font-family:
"Open Sans",
"DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
384 .conum[data-value] *{color:#fff!important}
385 .conum[data-value]+b{display:none}
386 .conum[data-value]::after{content:attr(data-value)}
387 pre .conum[data-value]{position:relative;top:-
.125em}
388 b.conum *{color:inherit!important}
389 .conum:not([data-value]):empty{display:none}
390 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
391 h1,h2,p,td.content,span.alt,summary{letter-spacing:-
.01em}
392 p strong,td.content strong,div.footnote strong{letter-spacing:-
.005em}
393 p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:
1.0625rem}
394 p{margin-bottom:
1.25rem}
395 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:
1em}
396 .exampleblock
>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:
0 1px
4px #e0e0dc}
397 .print-only{display:none!important}
398 @page{margin:
1.25cm
.75cm}
399 @media print{*{box-shadow:none!important;text-shadow:none!important}
401 a{color:inherit!important;text-decoration:underline!important}
402 a.bare,a[href^=
"#"],a[href^=
"mailto:"]{text-decoration:none!important}
403 a[href^=
"http:"]:not(.bare)::after,a[href^=
"https:"]:not(.bare)::after{content:
"(" attr(href)
")";display:inline-block;font-size:
.875em;padding-left:
.25em}
404 abbr[title]{border-bottom:
1px dotted}
405 abbr[title]::after{content:
" (" attr(title)
")"}
406 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
407 thead{display:table-header-group}
409 p,blockquote,dt,td.content{font-size:
1em;orphans:
3;widows:
3}
410 h2,h3,#toctitle,.sidebarblock
>.content
>.title{page-break-after:avoid}
411 #header,#content,#footnotes,#footer{max-width:none}
412 #toc,.sidebarblock,.exampleblock
>.content{background:none!important}
413 #toc{border-bottom:
1px solid #dddddf!important;padding-bottom:
0!important}
414 body.book #header{text-align:center}
415 body.book #header
>h1:first-child{border:
0!important;margin:
2.5em
0 1em}
416 body.book #header .details{border:
0!important;display:block;padding:
0!important}
417 body.book #header .details span:first-child{margin-left:
0!important}
418 body.book #header .details br{display:block}
419 body.book #header .details br+span::before{content:none!important}
420 body.book #toc{border:
0!important;text-align:left!important;padding:
0!important;margin:
0!important}
421 body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1
>h2{page-break-before:always}
422 .listingblock code[data-lang]::before{display:block}
423 #footer{padding:
0 .9375em}
424 .hide-on-print{display:none!important}
425 .print-only{display:block!important}
426 .hide-for-print{display:none!important}
427 .show-for-print{display:inherit!important}}
428 @media amzn-kf8,print{#header
>h1:first-child{margin-top:
1.25rem}
429 .sect1{padding:
0!important}
430 .sect1+.sect1{border:
0}
431 #footer{background:none}
432 #footer-text{color:rgba(
0,
0,
0,
.6);font-size:
.9em}}
433 @media amzn-kf8{#header,#content,#footnotes,#footer{padding:
0}}
441 <body class=
"manpage">
443 <h1>git-blame(
1) Manual Page
</h1>
444 <h2 id=
"_name">NAME
</h2>
445 <div class=
"sectionbody">
446 <p>git-blame - Show what revision and author last modified each line of a file
</p>
451 <h2 id=
"_synopsis">SYNOPSIS
</h2>
452 <div class=
"sectionbody">
453 <div class=
"verseblock">
454 <pre class=
"content"><em>git blame
</em> [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
455 [-L
<range
>] [-S
<revs-file
>] [-M] [-C] [-C] [-C] [--since=
<date
>]
456 [--ignore-rev
<rev
>] [--ignore-revs-file
<file
>]
457 [--color-lines] [--color-by-age] [--progress] [--abbrev=
<n
>]
458 [ --contents
<file
> ] [
<rev
> | --reverse
<rev
>..
<rev
>] [--]
<file
></pre>
463 <h2 id=
"_description">DESCRIPTION
</h2>
464 <div class=
"sectionbody">
465 <div class=
"paragraph">
466 <p>Annotates each line in the given file with information from the revision which
467 last modified the line. Optionally, start annotating from the given revision.
</p>
469 <div class=
"paragraph">
470 <p>When specified one or more times,
<code>-L
</code> restricts annotation to the requested
473 <div class=
"paragraph">
474 <p>The origin of lines is automatically followed across whole-file
475 renames (currently there is no option to turn the rename-following
476 off). To follow lines moved from one file to another, or to follow
477 lines that were copied and pasted from another file, etc., see the
478 <code>-C
</code> and
<code>-M
</code> options.
</p>
480 <div class=
"paragraph">
481 <p>The report does not tell you anything about lines which have been deleted or
482 replaced; you need to use a tool such as
<em>git diff
</em> or the
"pickaxe"
483 interface briefly mentioned in the following paragraph.
</p>
485 <div class=
"paragraph">
486 <p>Apart from supporting file annotation, Git also supports searching the
487 development history for when a code snippet occurred in a change. This makes it
488 possible to track when a code snippet was added to a file, moved or copied
489 between files, and eventually deleted or replaced. It works by searching for
490 a text string in the diff. A small example of the pickaxe interface
491 that searches for
<code>blame_usage
</code>:
</p>
493 <div class=
"listingblock">
494 <div class=
"content">
495 <pre>$ git log --pretty=oneline -S'blame_usage'
496 5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S
<ancestry-file
>
497 ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output
</pre>
503 <h2 id=
"_options">OPTIONS
</h2>
504 <div class=
"sectionbody">
507 <dt class=
"hdlist1">-b
</dt>
509 <p>Show blank SHA-
1 for boundary commits. This can also
510 be controlled via the
<code>blame.blankBoundary
</code> config option.
</p>
512 <dt class=
"hdlist1">--root
</dt>
514 <p>Do not treat root commits as boundaries. This can also be
515 controlled via the
<code>blame.showRoot
</code> config option.
</p>
517 <dt class=
"hdlist1">--show-stats
</dt>
519 <p>Include additional statistics at the end of blame output.
</p>
521 <dt class=
"hdlist1">-L
<start
>,
<end
></dt>
522 <dt class=
"hdlist1">-L :
<funcname
></dt>
524 <p>Annotate only the line range given by
<em><start
>,
<end
></em>,
525 or by the function name regex
<em><funcname
></em>.
526 May be specified multiple times. Overlapping ranges are allowed.
</p>
527 <div class=
"paragraph">
528 <p><em><start
></em> and
<em><end
></em> are optional.
<code>-L
</code> <em><start
></em> or
<code>-L
</code> <em><start
></em><code>,
</code> spans from
529 <em><start
></em> to end of file.
<code>-L
</code> <code>,
</code><em><end
></em> spans from start of file to
<em><end
></em>.
</p>
531 <div class=
"paragraph">
532 <p><em><start
></em> and
<em><end
></em> can take one of these forms:
</p>
538 <div class=
"paragraph">
539 <p>If
<em><start
></em> or
<em><end
></em> is a number, it specifies an
540 absolute line number (lines count from
1).
</p>
544 <p><code>/regex/
</code></p>
545 <div class=
"paragraph">
546 <p>This form will use the first line matching the given
547 POSIX regex. If
<em><start
></em> is a regex, it will search from the end of
548 the previous
<code>-L
</code> range, if any, otherwise from the start of file.
549 If
<em><start
></em> is
<code>^/regex/
</code>, it will search from the start of file.
550 If
<em><end
></em> is a regex, it will search
551 starting at the line given by
<em><start
></em>.
</p>
555 <p>+offset or -offset
</p>
556 <div class=
"paragraph">
557 <p>This is only valid for
<em><end
></em> and will specify a number
558 of lines before or after the line given by
<em><start
></em>.
</p>
563 <div class=
"paragraph">
564 <p>If
<code>:
</code><em><funcname
></em> is given in place of
<em><start
></em> and
<em><end
></em>, it is a
565 regular expression that denotes the range from the first funcname line
566 that matches
<em><funcname
></em>, up to the next funcname line.
<code>:
</code><em><funcname
></em>
567 searches from the end of the previous
<code>-L
</code> range, if any, otherwise
568 from the start of file.
<code>^:
</code><em><funcname
></em> searches from the start of
569 file. The function names are determined in the same way as
<code>git
</code> <code>diff
</code>
570 works out patch hunk headers (see
<em>Defining a custom hunk-header
</em>
571 in
<a href=
"gitattributes.html">gitattributes(
5)
</a>).
</p>
574 <dt class=
"hdlist1">-l
</dt>
576 <p>Show long rev (Default: off).
</p>
578 <dt class=
"hdlist1">-t
</dt>
580 <p>Show raw timestamp (Default: off).
</p>
582 <dt class=
"hdlist1">-S
<revs-file
></dt>
584 <p>Use revisions from revs-file instead of calling
<a href=
"git-rev-list.html">git-rev-list(
1)
</a>.
</p>
586 <dt class=
"hdlist1">--reverse
<rev
>..
<rev
></dt>
588 <p>Walk history forward instead of backward. Instead of showing
589 the revision in which a line appeared, this shows the last
590 revision in which a line has existed. This requires a range of
591 revision like START..END where the path to blame exists in
592 START.
<code>git
</code> <code>blame
</code> <code>--reverse
</code> <code>START
</code> is taken as
<code>git
</code> <code>blame
</code>
593 <code>--reverse
</code> <code>START
</code><code>..
</code><code>HEAD
</code> for convenience.
</p>
595 <dt class=
"hdlist1">--first-parent
</dt>
597 <p>Follow only the first parent commit upon seeing a merge
598 commit. This option can be used to determine when a line
599 was introduced to a particular integration branch, rather
600 than when it was introduced to the history overall.
</p>
602 <dt class=
"hdlist1">-p
</dt>
603 <dt class=
"hdlist1">--porcelain
</dt>
605 <p>Show in a format designed for machine consumption.
</p>
607 <dt class=
"hdlist1">--line-porcelain
</dt>
609 <p>Show the porcelain format, but output commit information for
610 each line, not just the first time a commit is referenced.
611 Implies --porcelain.
</p>
613 <dt class=
"hdlist1">--incremental
</dt>
615 <p>Show the result incrementally in a format designed for
616 machine consumption.
</p>
618 <dt class=
"hdlist1">--encoding=
<encoding
></dt>
620 <p>Specifies the encoding used to output author names
621 and commit summaries. Setting it to
<code>none
</code> makes blame
622 output unconverted data. For more information see the
623 discussion about encoding in the
<a href=
"git-log.html">git-log(
1)
</a>
626 <dt class=
"hdlist1">--contents
<file
></dt>
628 <p>Annotate using the contents from the named file, starting from
<rev
>
629 if it is specified, and HEAD otherwise. You may specify
<em>-
</em> to make
630 the command read from the standard input for the file contents.
</p>
632 <dt class=
"hdlist1">--date
<format
></dt>
634 <p>Specifies the format used to output dates. If --date is not
635 provided, the value of the blame.date config variable is
636 used. If the blame.date config variable is also not set, the
637 iso format is used. For supported values, see the discussion
638 of the --date option at
<a href=
"git-log.html">git-log(
1)
</a>.
</p>
640 <dt class=
"hdlist1">--[no-]progress
</dt>
642 <p>Progress status is reported on the standard error stream
643 by default when it is attached to a terminal. This flag
644 enables progress reporting even if not attached to a
645 terminal. Can
’t use
<code>--progress
</code> together with
<code>--porcelain
</code>
646 or
<code>--incremental
</code>.
</p>
648 <dt class=
"hdlist1">-M[
<num
>]
</dt>
650 <p>Detect moved or copied lines within a file. When a commit
651 moves or copies a block of lines (e.g. the original file
652 has A and then B, and the commit changes it to B and then
653 A), the traditional
<em>blame
</em> algorithm notices only half of
654 the movement and typically blames the lines that were moved
655 up (i.e. B) to the parent and assigns blame to the lines that
656 were moved down (i.e. A) to the child commit. With this
657 option, both groups of lines are blamed on the parent by
658 running extra passes of inspection.
</p>
659 <div class=
"paragraph">
660 <p><num
> is optional but it is the lower bound on the number of
661 alphanumeric characters that Git must detect as moving/copying
662 within a file for it to associate those lines with the parent
663 commit. The default value is
20.
</p>
666 <dt class=
"hdlist1">-C[
<num
>]
</dt>
668 <p>In addition to
<code>-M
</code>, detect lines moved or copied from other
669 files that were modified in the same commit. This is
670 useful when you reorganize your program and move code
671 around across files. When this option is given twice,
672 the command additionally looks for copies from other
673 files in the commit that creates the file. When this
674 option is given three times, the command additionally
675 looks for copies from other files in any commit.
</p>
676 <div class=
"paragraph">
677 <p><num
> is optional but it is the lower bound on the number of
678 alphanumeric characters that Git must detect as moving/copying
679 between files for it to associate those lines with the parent
680 commit. And the default value is
40. If there are more than one
681 <code>-C
</code> options given, the
<num
> argument of the last
<code>-C
</code> will
685 <dt class=
"hdlist1">--ignore-rev
<rev
></dt>
687 <p>Ignore changes made by the revision when assigning blame, as if the
688 change never happened. Lines that were changed or added by an ignored
689 commit will be blamed on the previous commit that changed that line or
690 nearby lines. This option may be specified multiple times to ignore
691 more than one revision. If the
<code>blame.markIgnoredLines
</code> config option
692 is set, then lines that were changed by an ignored commit and attributed to
693 another commit will be marked with a ? in the blame output. If the
694 <code>blame.markUnblamableLines
</code> config option is set, then those lines touched
695 by an ignored commit that we could not attribute to another revision are
696 marked with a
<em>*
</em>.
</p>
698 <dt class=
"hdlist1">--ignore-revs-file
<file
></dt>
700 <p>Ignore revisions listed in
<code>file
</code>, which must be in the same format as an
701 <code>fsck.skipList
</code>. This option may be repeated, and these files will be
702 processed after any files specified with the
<code>blame.ignoreRevsFile
</code> config
703 option. An empty file name,
"", will clear the list of revs from
704 previously processed files.
</p>
706 <dt class=
"hdlist1">--color-lines
</dt>
708 <p>Color line annotations in the default format differently if they come from
709 the same commit as the preceding line. This makes it easier to distinguish
710 code blocks introduced by different commits. The color defaults to cyan and
711 can be adjusted using the
<code>color.blame.repeatedLines
</code> config option.
</p>
713 <dt class=
"hdlist1">--color-by-age
</dt>
715 <p>Color line annotations depending on the age of the line in the default format.
716 The
<code>color.blame.highlightRecent
</code> config option controls what color is used for
717 each range of age.
</p>
719 <dt class=
"hdlist1">-h
</dt>
721 <p>Show help message.
</p>
723 <dt class=
"hdlist1">-c
</dt>
725 <p>Use the same output mode as
<a href=
"git-annotate.html">git-annotate(
1)
</a> (Default: off).
</p>
727 <dt class=
"hdlist1">--score-debug
</dt>
729 <p>Include debugging information related to the movement of
730 lines between files (see
<code>-C
</code>) and lines moved within a
731 file (see
<code>-M
</code>). The first number listed is the score.
732 This is the number of alphanumeric characters detected
733 as having been moved between or within files. This must be above
734 a certain threshold for
<em>git blame
</em> to consider those lines
735 of code to have been moved.
</p>
737 <dt class=
"hdlist1">-f
</dt>
738 <dt class=
"hdlist1">--show-name
</dt>
740 <p>Show the filename in the original commit. By default
741 the filename is shown if there is any line that came from a
742 file with a different name, due to rename detection.
</p>
744 <dt class=
"hdlist1">-n
</dt>
745 <dt class=
"hdlist1">--show-number
</dt>
747 <p>Show the line number in the original commit (Default: off).
</p>
749 <dt class=
"hdlist1">-s
</dt>
751 <p>Suppress the author name and timestamp from the output.
</p>
753 <dt class=
"hdlist1">-e
</dt>
754 <dt class=
"hdlist1">--show-email
</dt>
756 <p>Show the author email instead of the author name (Default: off).
757 This can also be controlled via the
<code>blame.showEmail
</code> config
760 <dt class=
"hdlist1">-w
</dt>
762 <p>Ignore whitespace when comparing the parent
’s version and
763 the child
’s to find where the lines came from.
</p>
765 <dt class=
"hdlist1">--abbrev=
<n
></dt>
767 <p>Instead of using the default
7+
1 hexadecimal digits as the
768 abbreviated object name, use
<m
>+
1 digits, where
<m
> is at
769 least
<n
> but ensures the commit object names are unique.
771 is used for a caret to mark the boundary commit.
</p>
778 <h2 id=
"_the_default_format">THE DEFAULT FORMAT
</h2>
779 <div class=
"sectionbody">
780 <div class=
"paragraph">
781 <p>When neither
<code>--porcelain
</code> nor
<code>--incremental
</code> option is specified,
782 <code>git
</code> <code>blame
</code> will output annotation for each line with:
</p>
787 <p>abbreviated object name for the commit the line came from;
</p>
790 <p>author ident (by default the author name and date, unless
<code>-s
</code> or
<code>-e
</code>
791 is specified); and
</p>
798 <div class=
"paragraph">
799 <p>before the line contents.
</p>
804 <h2 id=
"_the_porcelain_format">THE PORCELAIN FORMAT
</h2>
805 <div class=
"sectionbody">
806 <div class=
"paragraph">
807 <p>In this format, each line is output after a header; the
808 header at the minimum has the first line which has:
</p>
813 <p>40-byte SHA-
1 of the commit the line is attributed to;
</p>
816 <p>the line number of the line in the original file;
</p>
819 <p>the line number of the line in the final file;
</p>
822 <p>on a line that starts a group of lines from a different
823 commit than the previous one, the number of lines in this
824 group. On subsequent lines this field is absent.
</p>
828 <div class=
"paragraph">
829 <p>This header line is followed by the following information
830 at least once for each commit:
</p>
835 <p>the author name (
"author"), email (
"author-mail"), time
836 (
"author-time"), and time zone (
"author-tz"); similarly
840 <p>the filename in the commit that the line is attributed to.
</p>
843 <p>the first line of the commit log message (
"summary").
</p>
847 <div class=
"paragraph">
848 <p>The contents of the actual line are output after the above
849 header, prefixed by a TAB. This is to allow adding more
850 header elements later.
</p>
852 <div class=
"paragraph">
853 <p>The porcelain format generally suppresses commit information that has
854 already been seen. For example, two lines that are blamed to the same
855 commit will both be shown, but the details for that commit will be shown
856 only once. This is more efficient, but may require more state be kept by
857 the reader. The
<code>--line-porcelain
</code> option can be used to output full
858 commit information for each line, allowing simpler (but less efficient)
861 <div class=
"literalblock">
862 <div class=
"content">
863 <pre># count the number of lines attributed to each author
864 git blame --line-porcelain file |
865 sed -n 's/^author //p' |
866 sort | uniq -c | sort -rn
</pre>
872 <h2 id=
"_specifying_ranges">SPECIFYING RANGES
</h2>
873 <div class=
"sectionbody">
874 <div class=
"paragraph">
875 <p>Unlike
<em>git blame
</em> and
<em>git annotate
</em> in older versions of git, the extent
876 of the annotation can be limited to both line ranges and revision
877 ranges. The
<code>-L
</code> option, which limits annotation to a range of lines, may be
878 specified multiple times.
</p>
880 <div class=
"paragraph">
881 <p>When you are interested in finding the origin for
882 lines
40-
60 for file
<code>foo
</code>, you can use the
<code>-L
</code> option like so
883 (they mean the same thing
 — both ask for
21 lines starting at
886 <div class=
"literalblock">
887 <div class=
"content">
888 <pre>git blame -L
40,
60 foo
889 git blame -L
40,+
21 foo
</pre>
892 <div class=
"paragraph">
893 <p>Also you can use a regular expression to specify the line range:
</p>
895 <div class=
"literalblock">
896 <div class=
"content">
897 <pre>git blame -L '/^sub hello {/,/^}$/' foo
</pre>
900 <div class=
"paragraph">
901 <p>which limits the annotation to the body of the
<code>hello
</code> subroutine.
</p>
903 <div class=
"paragraph">
904 <p>When you are not interested in changes older than version
905 v2.6
.18, or changes older than
3 weeks, you can use revision
906 range specifiers similar to
<em>git rev-list
</em>:
</p>
908 <div class=
"literalblock">
909 <div class=
"content">
910 <pre>git blame v2.6
.18.. -- foo
911 git blame --since=
3.weeks -- foo
</pre>
914 <div class=
"paragraph">
915 <p>When revision range specifiers are used to limit the annotation,
916 lines that have not changed since the range boundary (either the
917 commit v2.6
.18 or the most recent commit that is more than
3
918 weeks old in the above example) are blamed for that range
921 <div class=
"paragraph">
922 <p>A particularly useful way is to see if an added file has lines
923 created by copy-and-paste from existing files. Sometimes this
924 indicates that the developer was being sloppy and did not
925 refactor the code properly. You can first find the commit that
926 introduced the file with:
</p>
928 <div class=
"literalblock">
929 <div class=
"content">
930 <pre>git log --diff-filter=A --pretty=short -- foo
</pre>
933 <div class=
"paragraph">
934 <p>and then annotate the change between the commit and its
935 parents, using
<code>commit^
</code>! notation:
</p>
937 <div class=
"literalblock">
938 <div class=
"content">
939 <pre>git blame -C -C -f $commit^! -- foo
</pre>
945 <h2 id=
"_incremental_output">INCREMENTAL OUTPUT
</h2>
946 <div class=
"sectionbody">
947 <div class=
"paragraph">
948 <p>When called with
<code>--incremental
</code> option, the command outputs the
949 result as it is built. The output generally will talk about
950 lines touched by more recent commits first (i.e. the lines will
951 be annotated out of order) and is meant to be used by
952 interactive viewers.
</p>
954 <div class=
"paragraph">
955 <p>The output format is similar to the Porcelain format, but it
956 does not contain the actual lines from the file that is being
959 <div class=
"olist arabic">
962 <p>Each blame entry always starts with a line of:
</p>
963 <div class=
"literalblock">
964 <div class=
"content">
965 <pre><40-byte-hex-sha1
> <sourceline
> <resultline
> <num-lines
></pre>
968 <div class=
"paragraph">
969 <p>Line numbers count from
1.
</p>
973 <p>The first time that a commit shows up in the stream, it has various
974 other information about it printed out with a one-word tag at the
975 beginning of each line describing the extra commit information (author,
976 email, committer, dates, summary, etc.).
</p>
979 <p>Unlike the Porcelain format, the filename information is always
980 given and terminates the entry:
</p>
981 <div class=
"literalblock">
982 <div class=
"content">
983 <pre>"filename" <whitespace-quoted-filename-goes-here
></pre>
986 <div class=
"paragraph">
987 <p>and thus it is really quite easy to parse for some line- and word-oriented
988 parser (which should be quite natural for most scripting languages).
</p>
990 <div class=
"admonitionblock note">
994 <div class=
"title">Note
</div>
997 For people who do parsing: to make it more robust, just ignore any
998 lines between the first and last one (
"<sha1>" and
"filename" lines)
999 where you do not recognize the tag words (or care about that particular
1000 one) at the beginning of the
"extended information" lines. That way, if
1001 there is ever added information (like the commit encoding or extended
1002 commit commentary), a blame viewer will not care.
1013 <h2 id=
"_mapping_authors">MAPPING AUTHORS
</h2>
1014 <div class=
"sectionbody">
1015 <div class=
"paragraph">
1016 <p>See
<a href=
"gitmailmap.html">gitmailmap(
5)
</a>.
</p>
1021 <h2 id=
"_configuration">CONFIGURATION
</h2>
1022 <div class=
"sectionbody">
1023 <div class=
"paragraph">
1024 <p>Everything below this line in this section is selectively included
1025 from the
<a href=
"git-config.html">git-config(
1)
</a> documentation. The content is the same
1026 as what
’s found there:
</p>
1030 <dt class=
"hdlist1">blame.blankBoundary
</dt>
1032 <p>Show blank commit object name for boundary commits in
1033 <a href=
"git-blame.html">git-blame(
1)
</a>. This option defaults to false.
</p>
1035 <dt class=
"hdlist1">blame.coloring
</dt>
1037 <p>This determines the coloring scheme to be applied to blame
1038 output. It can be
<em>repeatedLines
</em>,
<em>highlightRecent
</em>,
1039 or
<em>none
</em> which is the default.
</p>
1041 <dt class=
"hdlist1">blame.date
</dt>
1043 <p>Specifies the format used to output dates in
<a href=
"git-blame.html">git-blame(
1)
</a>.
1044 If unset the iso format is used. For supported values,
1045 see the discussion of the
<code>--date
</code> option at
<a href=
"git-log.html">git-log(
1)
</a>.
</p>
1047 <dt class=
"hdlist1">blame.showEmail
</dt>
1049 <p>Show the author email instead of author name in
<a href=
"git-blame.html">git-blame(
1)
</a>.
1050 This option defaults to false.
</p>
1052 <dt class=
"hdlist1">blame.showRoot
</dt>
1054 <p>Do not treat root commits as boundaries in
<a href=
"git-blame.html">git-blame(
1)
</a>.
1055 This option defaults to false.
</p>
1057 <dt class=
"hdlist1">blame.ignoreRevsFile
</dt>
1059 <p>Ignore revisions listed in the file, one unabbreviated object name per
1060 line, in
<a href=
"git-blame.html">git-blame(
1)
</a>. Whitespace and comments beginning with
1061 # are ignored. This option may be repeated multiple times. Empty
1062 file names will reset the list of ignored revisions. This option will
1063 be handled before the command line option
<code>--ignore-revs-file
</code>.
</p>
1065 <dt class=
"hdlist1">blame.markUnblamableLines
</dt>
1067 <p>Mark lines that were changed by an ignored revision that we could not
1068 attribute to another commit with a
<em>*
</em> in the output of
1069 <a href=
"git-blame.html">git-blame(
1)
</a>.
</p>
1071 <dt class=
"hdlist1">blame.markIgnoredLines
</dt>
1073 <p>Mark lines that were changed by an ignored revision that we attributed to
1074 another commit with a
<em>?
</em> in the output of
<a href=
"git-blame.html">git-blame(
1)
</a>.
</p>
1081 <h2 id=
"_see_also">SEE ALSO
</h2>
1082 <div class=
"sectionbody">
1083 <div class=
"paragraph">
1084 <p><a href=
"git-annotate.html">git-annotate(
1)
</a></p>
1089 <h2 id=
"_git">GIT
</h2>
1090 <div class=
"sectionbody">
1091 <div class=
"paragraph">
1092 <p>Part of the
<a href=
"git.html">git(
1)
</a> suite
</p>
1098 <div id=
"footer-text">
1099 Last updated
2024-
02-
08 15:
45:
59 -
0800