-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.

--first-parent::
	Follow only the first parent commit upon seeing a merge
	commit. This option can be used to determine when a line
	was introduced to a particular integration branch, rather
	than when it was introduced to the history overall.

-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.

--ignore-rev <rev>::
	Ignore changes made by the revision when assigning blame, as if the
	change never happened.  Lines that were changed or added by an ignored
	commit will be blamed on the previous commit that changed that line or
	nearby lines.  This option may be specified multiple times to ignore
	more than one revision.  If the `blame.markIgnoredLines` config option
	is set, then lines that were changed by an ignored commit and attributed to
	another commit will be marked with a `?` in the blame output.  If the
	`blame.markUnblamableLines` config option is set, then those lines touched
	by an ignored commit that we could not attribute to another revision are
	marked with a '*'.

--ignore-revs-file <file>::
	Ignore revisions listed in `file`, which must be in the same format as an
	`fsck.skipList`.  This option may be repeated, and these files will be
	processed after any files specified with the `blame.ignoreRevsFile` config
	option.  An empty file name, `""`, will clear the list of revs from
	previously processed files.

-h::
	Show help message.
