| '\" t |
| .\" Title: git-annotate |
| .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] |
| .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/> |
| .\" Date: 2026-02-09 |
| .\" Manual: Git Manual |
| .\" Source: Git 2.53.0.68.g864f55e190 |
| .\" Language: English |
| .\" |
| .TH "GIT\-ANNOTATE" "1" "2026-02-09" "Git 2\&.53\&.0\&.68\&.g864f55e" "Git Manual" |
| .\" ----------------------------------------------------------------- |
| .\" * Define some portability stuff |
| .\" ----------------------------------------------------------------- |
| .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| .\" http://bugs.debian.org/507673 |
| .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html |
| .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| .ie \n(.g .ds Aq \(aq |
| .el .ds Aq ' |
| .\" ----------------------------------------------------------------- |
| .\" * set default formatting |
| .\" ----------------------------------------------------------------- |
| .\" disable hyphenation |
| .nh |
| .\" disable justification (adjust text to left margin only) |
| .ad l |
| .\" ----------------------------------------------------------------- |
| .\" * MAIN CONTENT STARTS HERE * |
| .\" ----------------------------------------------------------------- |
| .SH "NAME" |
| git-annotate \- Annotate file lines with commit information |
| .SH "SYNOPSIS" |
| .sp |
| .nf |
| \fIgit annotate\fR [<options>] [<rev\-opts>] [<rev>] [\-\-] <file> |
| .fi |
| .SH "DESCRIPTION" |
| .sp |
| Annotates each line in the given file with information from the commit which introduced the line\&. Optionally annotates from a given revision\&. |
| .sp |
| The only difference between this command and \fBgit-blame\fR(1) is that they use slightly different output formats, and this command exists only for backward compatibility to support existing scripts, and provide a more familiar command name for people coming from other SCM systems\&. |
| .SH "OPTIONS" |
| .PP |
| \fB\-b\fR |
| .RS 4 |
| Show blank SHA\-1 for boundary commits\&. This can also be controlled via the |
| \fBblame\&.blankBoundary\fR |
| config option\&. |
| .RE |
| .PP |
| \fB\-\-root\fR |
| .RS 4 |
| Do not treat root commits as boundaries\&. This can also be controlled via the |
| \fBblame\&.showRoot\fR |
| config option\&. |
| .RE |
| .PP |
| \fB\-\-show\-stats\fR |
| .RS 4 |
| Include additional statistics at the end of blame output\&. |
| .RE |
| .PP |
| \fB\-L\fR \fI<start>\fR\fB,\fR\fI<end>\fR, \fB\-L\fR \fB:\fR\fI<funcname>\fR |
| .RS 4 |
| Annotate only the line range given by |
| \fI<start>\fR\fB,\fR\fI<end>\fR, or by the function name regex |
| \fI<funcname>\fR\&. May be specified multiple times\&. Overlapping ranges are allowed\&. |
| .sp |
| \fI<start>\fR |
| and |
| \fI<end>\fR |
| are optional\&. |
| \fB\-L\fR |
| \fI<start>\fR |
| or |
| \fB\-L\fR |
| \fI<start>\fR\fB,\fR |
| spans from |
| \fI<start>\fR |
| to end of file\&. |
| \fB\-L\fR |
| \fB,\fR\fI<end>\fR |
| spans from start of file to |
| \fI<end>\fR\&. |
| .sp |
| \fI<start>\fR |
| and |
| \fI<end>\fR |
| can take one of these forms: |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| \fI<number>\fR |
| .sp |
| If |
| \fI<start>\fR |
| or |
| \fI<end>\fR |
| is a number, it specifies an absolute line number (lines count from 1)\&. |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| \fB/\fR\fI<regex>\fR\fB/\fR |
| .sp |
| This form will use the first line matching the given POSIX |
| \fI<regex>\fR\&. If |
| \fI<start>\fR |
| is a regex, it will search from the end of the previous |
| \fB\-L\fR |
| range, if any, otherwise from the start of file\&. If |
| \fI<start>\fR |
| is |
| \fB^/\fR\fI<regex>\fR\fB/\fR, it will search from the start of file\&. If |
| \fI<end>\fR |
| is a regex, it will search starting at the line given by |
| \fI<start>\fR\&. |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| \fB+\fR\fI<offset>\fR |
| or |
| \fB\-\fR\fI<offset>\fR |
| .sp |
| This is only valid for |
| \fI<end>\fR |
| and will specify a number of lines before or after the line given by |
| \fI<start>\fR\&. |
| .RE |
| .sp |
| If |
| \fB:\fR\fI<funcname>\fR |
| is given in place of |
| \fI<start>\fR |
| and |
| \fI<end>\fR, it is a regular expression that denotes the range from the first funcname line that matches |
| \fI<funcname>\fR, up to the next funcname line\&. |
| \fB:\fR\fI<funcname>\fR |
| searches from the end of the previous |
| \fB\-L\fR |
| range, if any, otherwise from the start of file\&. |
| \fB^:\fR\fI<funcname>\fR |
| searches from the start of file\&. The function names are determined in the same way as |
| \fBgit\fR |
| \fBdiff\fR |
| works out patch hunk headers (see |
| \fIDefining a custom hunk\-header\fR |
| in |
| \fBgitattributes\fR(5))\&. |
| .RE |
| .PP |
| \fB\-l\fR |
| .RS 4 |
| Show long rev (Default: off)\&. |
| .RE |
| .PP |
| \fB\-t\fR |
| .RS 4 |
| Show raw timestamp (Default: off)\&. |
| .RE |
| .PP |
| \fB\-S\fR \fI<revs\-file>\fR |
| .RS 4 |
| Use revisions from |
| \fI<revs\-file>\fR |
| instead of calling |
| \fBgit-rev-list\fR(1)\&. |
| .RE |
| .PP |
| \fB\-\-reverse\fR \fI<start>\fR\fB\&.\&.\fR\fI<end>\fR |
| .RS 4 |
| 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 |
| \fI<start>\fR\fB\&.\&.\fR\fI<end>\fR |
| where the path to blame exists in |
| \fI<start>\fR\&. |
| \fBgit\fR |
| \fBblame\fR |
| \fB\-\-reverse\fR |
| \fI<start>\fR |
| is taken as |
| \fBgit\fR |
| \fBblame\fR |
| \fB\-\-reverse\fR |
| \fI<start>\fR\fB\&.\&.\fR\fBHEAD\fR |
| for convenience\&. |
| .RE |
| .PP |
| \fB\-\-first\-parent\fR |
| .RS 4 |
| 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\&. |
| .RE |
| .PP |
| \fB\-p\fR, \fB\-\-porcelain\fR |
| .RS 4 |
| Show in a format designed for machine consumption\&. |
| .RE |
| .PP |
| \fB\-\-line\-porcelain\fR |
| .RS 4 |
| Show the porcelain format, but output commit information for each line, not just the first time a commit is referenced\&. Implies |
| \fB\-\-porcelain\fR\&. |
| .RE |
| .PP |
| \fB\-\-incremental\fR |
| .RS 4 |
| Show the result incrementally in a format designed for machine consumption\&. |
| .RE |
| .PP |
| \fB\-\-encoding=\fR\fI<encoding>\fR |
| .RS 4 |
| Specify the encoding used to output author names and commit summaries\&. Setting it to |
| \fBnone\fR |
| makes blame output unconverted data\&. For more information see the discussion about encoding in the |
| \fBgit-log\fR(1) |
| manual page\&. |
| .RE |
| .PP |
| \fB\-\-contents\fR \fI<file>\fR |
| .RS 4 |
| Annotate using the contents from |
| \fI<file>\fR, starting from |
| \fI<rev>\fR |
| if it is specified, and |
| \fBHEAD\fR |
| otherwise\&. You may specify |
| \fB\-\fR |
| to make the command read from the standard input for the file contents\&. |
| .RE |
| .PP |
| \fB\-\-date\fR \fI<format>\fR |
| .RS 4 |
| Specify the format used to output dates\&. If |
| \fB\-\-date\fR |
| is not provided, the value of the |
| \fBblame\&.date\fR |
| config variable is used\&. If the |
| \fBblame\&.date\fR |
| config variable is also not set, the iso format is used\&. For supported values, see the discussion of the |
| \fB\-\-date\fR |
| option at |
| \fBgit-log\fR(1)\&. |
| .RE |
| .PP |
| \fB\-\-progress\fR, \fB\-\-no\-progress\fR |
| .RS 4 |
| Enable progress reporting on the standard error stream even if not attached to a terminal\&. By default, progress status is reported only when it is attached\&. You can\(cqt use |
| \fB\-\-progress\fR |
| together with |
| \fB\-\-porcelain\fR |
| or |
| \fB\-\-incremental\fR\&. |
| .RE |
| .PP |
| \fB\-M\fR[\fI<num>\fR] |
| .RS 4 |
| Detect moved or copied lines within a file\&. When a commit moves or copies a block of lines (e\&.g\&. the original file has |
| \fIA\fR |
| and then |
| \fIB\fR, and the commit changes it to |
| \fIB\fR |
| and then |
| \fIA\fR), the traditional |
| \fBblame\fR |
| algorithm notices only half of the movement and typically blames the lines that were moved up (i\&.e\&. |
| \fIB\fR) to the parent and assigns blame to the lines that were moved down (i\&.e\&. |
| \fIA\fR) to the child commit\&. With this option, both groups of lines are blamed on the parent by running extra passes of inspection\&. |
| .sp |
| \fI<num>\fR |
| 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\&. |
| .RE |
| .PP |
| \fB\-C\fR[\fI<num>\fR] |
| .RS 4 |
| In addition to |
| \fB\-M\fR, 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\&. |
| .sp |
| \fI<num>\fR |
| 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 |
| \fB\-C\fR |
| options given, the |
| \fI<num>\fR |
| argument of the last |
| \fB\-C\fR |
| will take effect\&. |
| .RE |
| .PP |
| \fB\-\-ignore\-rev\fR \fI<rev>\fR |
| .RS 4 |
| 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 |
| \fBblame\&.markIgnoredLines\fR |
| 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 |
| \fBblame\&.markUnblamableLines\fR |
| config option is set, then those lines touched by an ignored commit that we could not attribute to another revision are marked with a |
| \fB*\fR\&. In the porcelain modes, we print |
| \fBignored\fR |
| and |
| \fBunblamable\fR |
| on a newline respectively\&. |
| .RE |
| .PP |
| \fB\-\-ignore\-revs\-file\fR \fI<file>\fR |
| .RS 4 |
| Ignore revisions listed in |
| \fI<file>\fR, which must be in the same format as an |
| \fBfsck\&.skipList\fR\&. This option may be repeated, and these files will be processed after any files specified with the |
| \fBblame\&.ignoreRevsFile\fR |
| config option\&. An empty file name, "", will clear the list of revs from previously processed files\&. |
| .RE |
| .PP |
| \fB\-\-color\-lines\fR |
| .RS 4 |
| Color line annotations in the default format differently if they come from the same commit as the preceding line\&. This makes it easier to distinguish code blocks introduced by different commits\&. The color defaults to cyan and can be adjusted using the |
| \fBcolor\&.blame\&.repeatedLines\fR |
| config option\&. |
| .RE |
| .PP |
| \fB\-\-color\-by\-age\fR |
| .RS 4 |
| Color line annotations depending on the age of the line in the default format\&. The |
| \fBcolor\&.blame\&.highlightRecent\fR |
| config option controls what color is used for each range of age\&. |
| .RE |
| .PP |
| \fB\-h\fR |
| .RS 4 |
| Show help message\&. |
| .RE |
| .SH "SEE ALSO" |
| .sp |
| \fBgit-blame\fR(1) |
| .SH "GIT" |
| .sp |
| Part of the \fBgit\fR(1) suite |