-b::
	Show blank SHA-1 for boundary commits.  This can also
	be controlled via the `blame.blankboundary` config option.

--root::
	Do not treat root commits as boundaries.  This can also be
	controlled via the `blame.showRoot` config option.

--show-stats::
	Include additional statistics at the end of blame output.

-L <start>,<end>::
-L :<funcname>::
	Annotate only the given line range. May be specified multiple times.
	Overlapping ranges are allowed.
+
<start> and <end> are optional. ``-L <start>'' or ``-L <start>,'' spans from
<start> to end of file. ``-L ,<end>'' spans from start of file to <end>.
+
include::line-range-format.txt[]

-l::
	Show long rev (Default: off).

-t::
	Show raw timestamp (Default: off).

-S <revs-file>::
	Use revisions from revs-file instead of calling linkgit:git-rev-list[1].

--reverse <rev>..<rev>::
	Walk history forward instead of backward. Instead of showing
	the revision in which a line appeared, this shows the last
	revision in which a line has existed. This requires a range of
	revision like START..END where the path to blame exists in
	START.  `git blame --reverse START` is taken as `git blame
	--reverse START..HEAD` for convenience.

-p::
--porcelain::
	Show in a format designed for machine consumption.

--line-porcelain::
	Show the porcelain format, but output commit information for
	each line, not just the first time a commit is referenced.
	Implies --porcelain.

--incremental::
	Show the result incrementally in a format designed for
	machine consumption.

--encoding=<encoding>::
	Specifies the encoding used to output author names
	and commit summaries. Setting it to `none` makes blame
	output unconverted data. For more information see the
	discussion about encoding in the linkgit:git-log[1]
	manual page.

--contents <file>::
	When <rev> is not specified, the command annotates the
	changes starting backwards from the working tree copy.
	This flag makes the command pretend as if the working
	tree copy has the contents of the named file (specify
	`-` to make the command read from the standard input).

--date <format>::
	Specifies the format used to output dates. If --date is not
	provided, the value of the blame.date config variable is
	used. If the blame.date config variable is also not set, the
	iso format is used. For supported values, see the discussion
	of the --date option at linkgit:git-log[1].

--[no-]progress::
	Progress status is reported on the standard error stream
	by default when it is attached to a terminal. This flag
	enables progress reporting even if not attached to a
	terminal. Can't use `--progress` together with `--porcelain`
	or `--incremental`.

-M[<num>]::
	Detect moved or copied lines within a file. When a commit
	moves or copies a block of lines (e.g. the original file
	has A and then B, and the commit changes it to B and then
	A), the traditional 'blame' algorithm notices only half of
	the movement and typically blames the lines that were moved
	up (i.e. B) to the parent and assigns blame to the lines that
	were moved down (i.e. A) to the child commit.  With this
	option, both groups of lines are blamed on the parent by
	running extra passes of inspection.
+
<num> is optional but it is the lower bound on the number of
alphanumeric characters that Git must detect as moving/copying
within a file for it to associate those lines with the parent
commit. The default value is 20.

-C[<num>]::
	In addition to `-M`, detect lines moved or copied from other
	files that were modified in the same commit.  This is
	useful when you reorganize your program and move code
	around across files.  When this option is given twice,
	the command additionally looks for copies from other
	files in the commit that creates the file. When this
	option is given three times, the command additionally
	looks for copies from other files in any commit.
+
<num> is optional but it is the lower bound on the number of
alphanumeric characters that Git must detect as moving/copying
between files for it to associate those lines with the parent
commit. And the default value is 40. If there are more than one
`-C` options given, the <num> argument of the last `-C` will
take effect.

-h::
	Show help message.
