11
'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]
12
[-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file>
11
'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [--incremental] [-L n,m]
12
[-S <revs-file>] [-M] [-C] [-C] [--since=<date>]
13
[<rev> | --contents <file>] [--] <file>
24
25
interface briefly mentioned in the following paragraph.
26
27
Apart from supporting file annotation, git also supports searching the
27
development history for when a code snippet occured in a change. This makes it
28
development history for when a code snippet occurred in a change. This makes it
28
29
possible to track when a code snippet was added to a file, moved or copied
29
30
between files, and eventually deleted or replaced. It works by searching for
30
31
a text string in the diff. A small example:
41
include::blame-options.txt[]
41
44
Use the same output mode as gitlink:git-annotate[1] (Default: off).
44
Annotate only the specified line range (lines count from 1).
47
Show long rev (Default: off).
50
Show raw timestamp (Default: off).
52
-S, --rev-file <revs-file>::
53
Use revs from revs-file instead of calling gitlink:git-rev-list[1].
47
Include debugging information related to the movement of
48
lines between files (see `-C`) and lines moved within a
49
file (see `-M`). The first number listed is the score.
50
This is the number of alphanumeric characters detected
51
to be moved between or within files. This must be above
52
a certain threshold for git-blame to consider those lines
53
of code to have been moved.
56
56
Show filename in the original commit. By default
60
60
-n, --show-number::
61
61
Show line number in the original commit (Default: off).
64
Show in a format designed for machine consumption.
67
Detect moving lines in the file as well. When a commit
68
moves a block of lines in a file (e.g. the original file
69
has A and then B, and the commit changes it to B and
70
then A), traditional 'blame' algorithm typically blames
71
the lines that were moved up (i.e. B) to the parent and
72
assigns blame to the lines that were moved down (i.e. A)
73
to the child commit. With this option, both groups of
74
lines are blamed on the parent.
77
In addition to `-M`, detect lines copied from other
78
files that were modified in the same commit. This is
79
useful when you reorganize your program and move code
80
around across files. When this option is given twice,
81
the command looks for copies from all other files in the
82
parent for the commit that creates the file in addition.
88
63
THE PORCELAIN FORMAT
89
64
--------------------
91
66
In this format, each line is output after a header; the
92
header at the minumum has the first line which has:
67
header at the minimum has the first line which has:
94
69
- 40-byte SHA-1 of the commit the line is attributed to;
95
70
- the line number of the line in the original file;
112
87
header elements later.
118
93
Unlike `git-blame` and `git-annotate` in older git, the extent
119
94
of annotation can be limited to both line ranges and revision
120
95
ranges. When you are interested in finding the origin for
121
ll. 40-60 for file `foo`, you can use `-L` option like this:
96
ll. 40-60 for file `foo`, you can use `-L` option like these
97
(they mean the same thing -- both ask for 21 lines starting at
123
100
git blame -L 40,60 foo
101
git blame -L 40,+21 foo
125
103
Also you can use regular expression to specify the line range.
155
133
git blame -C -C -f $commit^! -- foo
139
When called with `--incremental` option, the command outputs the
140
result as it is built. The output generally will talk about
141
lines touched by more recent commits first (i.e. the lines will
142
be annotated out of order) and is meant to be used by
145
The output format is similar to the Porcelain format, but it
146
does not contain the actual lines from the file that is being
149
. Each blame entry always starts with a line of:
151
<40-byte hex sha1> <sourceline> <resultline> <num_lines>
153
Line numbers count from 1.
155
. The first time that commit shows up in the stream, it has various
156
other information about it printed out with a one-word tag at the
157
beginning of each line about that "extended commit info" (author,
158
email, committer, dates, summary etc).
160
. Unlike Porcelain format, the filename information is always
161
given and terminates the entry:
163
"filename" <whitespace-quoted-filename-goes-here>
165
and thus it's really quite easy to parse for some line- and word-oriented
166
parser (which should be quite natural for most scripting languages).
169
For people who do parsing: to make it more robust, just ignore any
170
lines in between the first and last one ("<sha1>" and "filename" lines)
171
where you don't recognize the tag-words (or care about that particular
172
one) at the beginning of the "extended information" lines. That way, if
173
there is ever added information (like the commit encoding or extended
174
commit commentary), a blame viewer won't ever care.
160
179
gitlink:git-annotate[1]