Home Explore Blog CI



git

1st chunk of `Documentation/git-blame.adoc`
659acc40c13641a1e120bdb981d8360922d1d5896de6d8510000000100000fa2
git-blame(1)
============

NAME
----
git-blame - Show what revision and author last modified each line of a file

SYNOPSIS
--------
[verse]
'git blame' [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
	    [-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>]
	    [--ignore-rev <rev>] [--ignore-revs-file <file>]
	    [--color-lines] [--color-by-age] [--progress] [--abbrev=<n>]
	    [ --contents <file> ] [<rev> | --reverse <rev>..<rev>] [--] <file>

DESCRIPTION
-----------

Annotates each line in the given file with information from the revision which
last modified the line. Optionally, start annotating from the given revision.

When specified one or more times, `-L` restricts annotation to the requested
lines.

The origin of lines is automatically followed across whole-file
renames (currently there is no option to turn the rename-following
off). To follow lines moved from one file to another, or to follow
lines that were copied and pasted from another file, etc., see the
`-C` and `-M` options.

The report does not tell you anything about lines which have been deleted or
replaced; you need to use a tool such as 'git diff' or the "pickaxe"
interface briefly mentioned in the following paragraph.

Apart from supporting file annotation, Git also supports searching the
development history for when a code snippet occurred in a change. This makes it
possible to track when a code snippet was added to a file, moved or copied
between files, and eventually deleted or replaced. It works by searching for
a text string in the diff. A small example of the pickaxe interface
that searches for `blame_usage`:

-----------------------------------------------------------------------------
$ git log --pretty=oneline -S'blame_usage'
5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S <ancestry-file>
ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output
-----------------------------------------------------------------------------

OPTIONS
-------
include::blame-options.adoc[]

-c::
	Use the same output mode as linkgit:git-annotate[1] (Default: off).

--score-debug::
	Include debugging information related to the movement of
	lines between files (see `-C`) and lines moved within a
	file (see `-M`).  The first number listed is the score.
	This is the number of alphanumeric characters detected
	as having been moved between or within files.  This must be above
	a certain threshold for 'git blame' to consider those lines
	of code to have been moved.

-f::
--show-name::
	Show the filename in the original commit.  By default
	the filename is shown if there is any line that came from a
	file with a different name, due to rename detection.

-n::
--show-number::
	Show the line number in the original commit (Default: off).

-s::
	Suppress the author name and timestamp from the output.

-e::
--show-email::
	Show the author email instead of the author name (Default: off).
	This can also be controlled via the `blame.showEmail` config
	option.

-w::
	Ignore whitespace when comparing the parent's version and
	the child's to find where the lines came from.

--abbrev=<n>::
	Instead of using the default 7+1 hexadecimal digits as the
	abbreviated object name, use <m>+1 digits, where <m> is at
	least <n> but ensures the commit object names are unique.
	Note that 1 column
	is used for a caret to mark the boundary commit.


THE DEFAULT FORMAT
------------------

When neither `--porcelain` nor `--incremental` option is specified,
`git blame` will output annotation for each line with:

- abbreviated object name for the commit the line came from;
- author ident (by default the author name and date, unless `-s` or `-e`
  is specified); and
- line number

before the line contents.

THE PORCELAIN FORMAT
--------------------

In this format, each line is output after a header; the
header at the minimum has the first line which has:

- 40-byte SHA-1 of the commit the line is attributed to;
- the line number of the line in the original

Title: Git Blame Command
Summary
The git-blame command is used to annotate each line in a file with information about the revision that last modified it, including the author and commit details, and can be customized with various options to control the output format and behavior.