'\" t
.\"     Title: git-diff-index
.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
.\"      Date: 2025-10-05
.\"    Manual: Git Manual
.\"    Source: Git 2.51.0.433.g45547b60ac
.\"  Language: English
.\"
.TH "GIT\-DIFF\-INDEX" "1" "2025-10-05" "Git 2\&.51\&.0\&.433\&.g45547b" "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-diff-index \- Compare a tree to the working tree or index
.SH "SYNOPSIS"
.sp
.nf
\fIgit diff\-index\fR [\-m] [\-\-cached] [\-\-merge\-base] [<common\-diff\-options>] <tree\-ish> [<path>\&...\:]
.fi
.SH "DESCRIPTION"
.sp
Compare the content and mode of the blobs found in a tree object with the corresponding tracked files in the working tree, or with the corresponding paths in the index\&. When <path> arguments are present, compare only paths matching those patterns\&. Otherwise all tracked files are compared\&.
.SH "OPTIONS"
.PP
\fB\-p\fR, \fB\-u\fR, \fB\-\-patch\fR
.RS 4
Generate patch (see
the section called \(lqGENERATING PATCH TEXT WITH \-P\(rq)\&.
.RE
.PP
\fB\-s\fR, \fB\-\-no\-patch\fR
.RS 4
Suppress all output from the diff machinery\&. Useful for commands like
\fBgit\fR
\fBshow\fR
that show the patch by default to squelch their output, or to cancel the effect of options like
\fB\-\-patch\fR,
\fB\-\-stat\fR
earlier on the command line in an alias\&.
.RE
.PP
\fB\-U\fR\fI<n>\fR, \fB\-\-unified=\fR\fI<n>\fR
.RS 4
Generate diffs with
\fI<n>\fR
lines of context instead of the usual three\&. Implies
\fB\-\-patch\fR\&.
.RE
.PP
\fB\-\-output=\fR\fI<file>\fR
.RS 4
Output to a specific file instead of stdout\&.
.RE
.PP
\fB\-\-output\-indicator\-new=\fR\fI<char>\fR, \fB\-\-output\-indicator\-old=\fR\fI<char>\fR, \fB\-\-output\-indicator\-context=\fR\fI<char>\fR
.RS 4
Specify the character used to indicate new, old or context lines in the generated patch\&. Normally they are
\fB+\fR,
\fB\-\fR
and \*(Aq \*(Aq respectively\&.
.RE
.PP
\fB\-\-raw\fR
.RS 4
Generate the diff in raw format\&. This is the default\&.
.RE
.PP
\fB\-\-patch\-with\-raw\fR
.RS 4
Synonym for
\fB\-p\fR
\fB\-\-raw\fR\&.
.RE
.PP
\fB\-\-indent\-heuristic\fR
.RS 4
Enable the heuristic that shifts diff hunk boundaries to make patches easier to read\&. This is the default\&.
.RE
.PP
\fB\-\-no\-indent\-heuristic\fR
.RS 4
Disable the indent heuristic\&.
.RE
.PP
\fB\-\-minimal\fR
.RS 4
Spend extra time to make sure the smallest possible diff is produced\&.
.RE
.PP
\fB\-\-patience\fR
.RS 4
Generate a diff using the "patience diff" algorithm\&.
.RE
.PP
\fB\-\-histogram\fR
.RS 4
Generate a diff using the "histogram diff" algorithm\&.
.RE
.PP
\fB\-\-anchored=\fR\fI<text>\fR
.RS 4
Generate a diff using the "anchored diff" algorithm\&.
.sp
This option may be specified more than once\&.
.sp
If a line exists in both the source and destination, exists only once, and starts with
\fI<text>\fR, this algorithm attempts to prevent it from appearing as a deletion or addition in the output\&. It uses the "patience diff" algorithm internally\&.
.RE
.PP
\fB\-\-diff\-algorithm=\fR(\fBpatience\fR|\fBminimal\fR|\fBhistogram\fR|\fBmyers\fR)
.RS 4
Choose a diff algorithm\&. The variants are as follows:
.PP
\fBdefault\fR, \fBmyers\fR
.RS 4
The basic greedy diff algorithm\&. Currently, this is the default\&.
.RE
.PP
\fBminimal\fR
.RS 4
Spend extra time to make sure the smallest possible diff is produced\&.
.RE
.PP
\fBpatience\fR
.RS 4
Use "patience diff" algorithm when generating patches\&.
.RE
.PP
\fBhistogram\fR
.RS 4
This algorithm extends the patience algorithm to "support low\-occurrence common elements"\&.
.RE
.sp
For instance, if you configured the
\fBdiff\&.algorithm\fR
variable to a non\-default value and want to use the default one, then you have to use
\fB\-\-diff\-algorithm=default\fR
option\&.
.RE
.PP
\fB\-\-stat\fR[\fB=\fR\fI<width>\fR[\fB,\fR\fI<name\-width>\fR[\fB,\fR\fI<count>\fR]]]
.RS 4
Generate a diffstat\&. By default, as much space as necessary will be used for the filename part, and the rest for the graph part\&. Maximum width defaults to terminal width, or 80 columns if not connected to a terminal, and can be overridden by
\fI<width>\fR\&. The width of the filename part can be limited by giving another width
\fI<name\-width>\fR
after a comma or by setting
\fBdiff\&.statNameWidth=\fR\fI<name\-width>\fR\&. The width of the graph part can be limited by using
\fB\-\-stat\-graph\-width=\fR\fI<graph\-width>\fR
or by setting
\fBdiff\&.statGraphWidth=\fR\fI<graph\-width>\fR\&. Using
\fB\-\-stat\fR
or
\fB\-\-stat\-graph\-width\fR
affects all commands generating a stat graph, while setting
\fBdiff\&.statNameWidth\fR
or
\fBdiff\&.statGraphWidth\fR
does not affect
\fBgit\fR
\fBformat\-patch\fR\&. By giving a third parameter
\fI<count>\fR, you can limit the output to the first
\fI<count>\fR
lines, followed by
\fB\&.\&.\&.\fR
if there are more\&.
.sp
These parameters can also be set individually with
\fB\-\-stat\-width=\fR\fI<width>\fR,
\fB\-\-stat\-name\-width=\fR\fI<name\-width>\fR
and
\fB\-\-stat\-count=\fR\fI<count>\fR\&.
.RE
.PP
\fB\-\-compact\-summary\fR
.RS 4
Output a condensed summary of extended header information such as file creations or deletions ("new" or "gone", optionally
\fB+l\fR
if it\(cqs a symlink) and mode changes (\fB+x\fR
or
\fB\-x\fR
for adding or removing executable bit respectively) in diffstat\&. The information is put between the filename part and the graph part\&. Implies
\fB\-\-stat\fR\&.
.RE
.PP
\fB\-\-numstat\fR
.RS 4
Similar to
\fB\-\-stat\fR, but shows number of added and deleted lines in decimal notation and pathname without abbreviation, to make it more machine friendly\&. For binary files, outputs two
\fB\-\fR
instead of saying
\fB0\fR
\fB0\fR\&.
.RE
.PP
\fB\-\-shortstat\fR
.RS 4
Output only the last line of the
\fB\-\-stat\fR
format containing total number of modified files, as well as number of added and deleted lines\&.
.RE
.PP
\fB\-X\fR [\fI<param>\fR\fB,\fR\&.\&.\&.], \fB\-\-dirstat\fR[\fB=\fR\fI<param>\fR\fB,\fR\&.\&.\&.]
.RS 4
Output the distribution of relative amount of changes for each sub\-directory\&. The behavior of
\fB\-\-dirstat\fR
can be customized by passing it a comma separated list of parameters\&. The defaults are controlled by the
\fBdiff\&.dirstat\fR
configuration variable (see
\fBgit-config\fR(1))\&. The following parameters are available:
.PP
\fBchanges\fR
.RS 4
Compute the dirstat numbers by counting the lines that have been removed from the source, or added to the destination\&. This ignores the amount of pure code movements within a file\&. In other words, rearranging lines in a file is not counted as much as other changes\&. This is the default behavior when no parameter is given\&.
.RE
.PP
\fBlines\fR
.RS 4
Compute the dirstat numbers by doing the regular line\-based diff analysis, and summing the removed/added line counts\&. (For binary files, count 64\-byte chunks instead, since binary files have no natural concept of lines)\&. This is a more expensive
\fB\-\-dirstat\fR
behavior than the
\fBchanges\fR
behavior, but it does count rearranged lines within a file as much as other changes\&. The resulting output is consistent with what you get from the other
\fB\-\-*stat\fR
options\&.
.RE
.PP
\fBfiles\fR
.RS 4
Compute the dirstat numbers by counting the number of files changed\&. Each changed file counts equally in the dirstat analysis\&. This is the computationally cheapest
\fB\-\-dirstat\fR
behavior, since it does not have to look at the file contents at all\&.
.RE
.PP
\fBcumulative\fR
.RS 4
Count changes in a child directory for the parent directory as well\&. Note that when using
\fBcumulative\fR, the sum of the percentages reported may exceed 100%\&. The default (non\-cumulative) behavior can be specified with the
\fBnoncumulative\fR
parameter\&.
.RE
.PP
\fI<limit>\fR
.RS 4
An integer parameter specifies a cut\-off percent (3% by default)\&. Directories contributing less than this percentage of the changes are not shown in the output\&.
.RE
.sp
Example: The following will count changed files, while ignoring directories with less than 10% of the total amount of changed files, and accumulating child directory counts in the parent directories:
\fB\-\-dirstat=files\fR,10,cumulative\&.
.RE
.PP
\fB\-\-cumulative\fR
.RS 4
Synonym for
\fB\-\-dirstat=cumulative\fR\&.
.RE
.PP
\fB\-\-dirstat\-by\-file\fR[\fB=\fR\fI<param>\fR\fB,\fR\&.\&.\&.]
.RS 4
Synonym for
\fB\-\-dirstat=files\fR,\fI<param>\fR\fB,\fR\&.\&.\&.\&.
.RE
.PP
\fB\-\-summary\fR
.RS 4
Output a condensed summary of extended header information such as creations, renames and mode changes\&.
.RE
.PP
\fB\-\-patch\-with\-stat\fR
.RS 4
Synonym for
\fB\-p\fR
\fB\-\-stat\fR\&.
.RE
.PP
\fB\-z\fR
.RS 4
When
\fB\-\-raw\fR,
\fB\-\-numstat\fR,
\fB\-\-name\-only\fR
or
\fB\-\-name\-status\fR
has been given, do not munge pathnames and use NULs as output field terminators\&.
.sp
Without this option, pathnames with "unusual" characters are quoted as explained for the configuration variable
\fBcore\&.quotePath\fR
(see
\fBgit-config\fR(1))\&.
.RE
.PP
\fB\-\-name\-only\fR
.RS 4
Show only the name of each changed file in the post\-image tree\&. The file names are often encoded in UTF\-8\&. For more information see the discussion about encoding in the
\fBgit-log\fR(1)
manual page\&.
.RE
.PP
\fB\-\-name\-status\fR
.RS 4
Show only the name(s) and status of each changed file\&. See the description of the
\fB\-\-diff\-filter\fR
option on what the status letters mean\&. Just like
\fB\-\-name\-only\fR
the file names are often encoded in UTF\-8\&.
.RE
.PP
\fB\-\-submodule\fR[\fB=\fR\fI<format>\fR]
.RS 4
Specify how differences in submodules are shown\&. When specifying
\fB\-\-submodule=short\fR
the
\fBshort\fR
format is used\&. This format just shows the names of the commits at the beginning and end of the range\&. When
\fB\-\-submodule\fR
or
\fB\-\-submodule=log\fR
is specified, the
\fBlog\fR
format is used\&. This format lists the commits in the range like
\fBgit-submodule\fR(1)
\fBsummary\fR
does\&. When
\fB\-\-submodule=diff\fR
is specified, the
\fBdiff\fR
format is used\&. This format shows an inline diff of the changes in the submodule contents between the commit range\&. Defaults to
\fBdiff\&.submodule\fR
or the
\fBshort\fR
format if the config option is unset\&.
.RE
.PP
\fB\-\-color\fR[\fB=\fR\fI<when>\fR]
.RS 4
Show colored diff\&.
\fB\-\-color\fR
(i\&.e\&. without
\fB=\fR\fI<when>\fR) is the same as
\fB\-\-color=always\fR\&.
\fI<when>\fR
can be one of
\fBalways\fR,
\fBnever\fR, or
\fBauto\fR\&.
.RE
.PP
\fB\-\-no\-color\fR
.RS 4
Turn off colored diff\&. It is the same as
\fB\-\-color=never\fR\&.
.RE
.PP
\fB\-\-color\-moved\fR[\fB=\fR\fI<mode>\fR]
.RS 4
Moved lines of code are colored differently\&. The
\fI<mode>\fR
defaults to
\fBno\fR
if the option is not given and to
\fBzebra\fR
if the option with no mode is given\&. The mode must be one of:
.PP
\fBno\fR
.RS 4
Moved lines are not highlighted\&.
.RE
.PP
\fBdefault\fR
.RS 4
Is a synonym for
\fBzebra\fR\&. This may change to a more sensible mode in the future\&.
.RE
.PP
\fBplain\fR
.RS 4
Any line that is added in one location and was removed in another location will be colored with
\fBcolor\&.diff\&.newMoved\fR\&. Similarly
\fBcolor\&.diff\&.oldMoved\fR
will be used for removed lines that are added somewhere else in the diff\&. This mode picks up any moved line, but it is not very useful in a review to determine if a block of code was moved without permutation\&.
.RE
.PP
\fBblocks\fR
.RS 4
Blocks of moved text of at least 20 alphanumeric characters are detected greedily\&. The detected blocks are painted using either the
\fBcolor\&.diff\&.\fR(\fBold\fR|\fBnew\fR)\fBMoved\fR
color\&. Adjacent blocks cannot be told apart\&.
.RE
.PP
\fBzebra\fR
.RS 4
Blocks of moved text are detected as in
\fBblocks\fR
mode\&. The blocks are painted using either the
\fBcolor\&.diff\&.\fR(\fBold\fR|\fBnew\fR)\fBMoved\fR
color or
\fBcolor\&.diff\&.\fR(\fBold\fR|\fBnew\fR)\fBMovedAlternative\fR\&. The change between the two colors indicates that a new block was detected\&.
.RE
.PP
\fBdimmed\-zebra\fR
.RS 4
Similar to
\fBzebra\fR, but additional dimming of uninteresting parts of moved code is performed\&. The bordering lines of two adjacent blocks are considered interesting, the rest is uninteresting\&.
\fBdimmed_zebra\fR
is a deprecated synonym\&.
.RE
.RE
.PP
\fB\-\-no\-color\-moved\fR
.RS 4
Turn off move detection\&. This can be used to override configuration settings\&. It is the same as
\fB\-\-color\-moved=no\fR\&.
.RE
.PP
\fB\-\-color\-moved\-ws=\fR\fI<mode>\fR\fB,\fR\&.\&.\&.
.RS 4
This configures how whitespace is ignored when performing the move detection for
\fB\-\-color\-moved\fR\&. These modes can be given as a comma separated list:
.PP
\fBno\fR
.RS 4
Do not ignore whitespace when performing move detection\&.
.RE
.PP
\fBignore\-space\-at\-eol\fR
.RS 4
Ignore changes in whitespace at EOL\&.
.RE
.PP
\fBignore\-space\-change\fR
.RS 4
Ignore changes in amount of whitespace\&. This ignores whitespace at line end, and considers all other sequences of one or more whitespace characters to be equivalent\&.
.RE
.PP
\fBignore\-all\-space\fR
.RS 4
Ignore whitespace when comparing lines\&. This ignores differences even if one line has whitespace where the other line has none\&.
.RE
.PP
\fBallow\-indentation\-change\fR
.RS 4
Initially ignore any whitespace in the move detection, then group the moved code blocks only into a block if the change in whitespace is the same per line\&. This is incompatible with the other modes\&.
.RE
.RE
.PP
\fB\-\-no\-color\-moved\-ws\fR
.RS 4
Do not ignore whitespace when performing move detection\&. This can be used to override configuration settings\&. It is the same as
\fB\-\-color\-moved\-ws=no\fR\&.
.RE
.PP
\fB\-\-word\-diff\fR[\fB=\fR\fI<mode>\fR]
.RS 4
By default, words are delimited by whitespace; see
\fB\-\-word\-diff\-regex\fR
below\&. The
\fI<mode>\fR
defaults to
\fBplain\fR, and must be one of:
.PP
\fBcolor\fR
.RS 4
Highlight changed words using only colors\&. Implies
\fB\-\-color\fR\&.
.RE
.PP
\fBplain\fR
.RS 4
Show words as [\fB\-removed\-\fR] and {\fBadded\fR}\&. Makes no attempts to escape the delimiters if they appear in the input, so the output may be ambiguous\&.
.RE
.PP
\fBporcelain\fR
.RS 4
Use a special line\-based format intended for script consumption\&. Added/removed/unchanged runs are printed in the usual unified diff format, starting with a
\fB+\fR/\fB\-\fR/` ` character at the beginning of the line and extending to the end of the line\&. Newlines in the input are represented by a tilde
\fB~\fR
on a line of its own\&.
.RE
.PP
\fBnone\fR
.RS 4
Disable word diff again\&.
.RE
.sp
Note that despite the name of the first mode, color is used to highlight the changed parts in all modes if enabled\&.
.RE
.PP
\fB\-\-word\-diff\-regex=\fR\fI<regex>\fR
.RS 4
Use
\fI<regex>\fR
to decide what a word is, instead of considering runs of non\-whitespace to be a word\&. Also implies
\fB\-\-word\-diff\fR
unless it was already enabled\&.
.sp
Every non\-overlapping match of the
\fI<regex>\fR
is considered a word\&. Anything between these matches is considered whitespace and ignored(!) for the purposes of finding differences\&. You may want to append |[\fB^\fR[\fB:space:\fR]] to your regular expression to make sure that it matches all non\-whitespace characters\&. A match that contains a newline is silently truncated(!) at the newline\&.
.sp
For example,
\fB\-\-word\-diff\-regex=\&.\fR
will treat each character as a word and, correspondingly, show differences character by character\&.
.sp
The regex can also be set via a diff driver or configuration option, see
\fBgitattributes\fR(5)
or
\fBgit-config\fR(1)\&. Giving it explicitly overrides any diff driver or configuration setting\&. Diff drivers override configuration settings\&.
.RE
.PP
\fB\-\-color\-words\fR[\fB=\fR\fI<regex>\fR]
.RS 4
Equivalent to
\fB\-\-word\-diff=color\fR
plus (if a regex was specified)
\fB\-\-word\-diff\-regex=\fR\fI<regex>\fR\&.
.RE
.PP
\fB\-\-no\-renames\fR
.RS 4
Turn off rename detection, even when the configuration file gives the default to do so\&.
.RE
.PP
\fB\-\-rename\-empty\fR, \fB\-\-no\-rename\-empty\fR
.RS 4
Whether to use empty blobs as rename source\&.
.RE
.PP
\fB\-\-check\fR
.RS 4
Warn if changes introduce conflict markers or whitespace errors\&. What are considered whitespace errors is controlled by
\fBcore\&.whitespace\fR
configuration\&. By default, trailing whitespaces (including lines that consist solely of whitespaces) and a space character that is immediately followed by a tab character inside the initial indent of the line are considered whitespace errors\&. Exits with non\-zero status if problems are found\&. Not compatible with
\fB\-\-exit\-code\fR\&.
.RE
.PP
\fB\-\-ws\-error\-highlight=\fR\fI<kind>\fR
.RS 4
Highlight whitespace errors in the
\fBcontext\fR,
\fBold\fR
or
\fBnew\fR
lines of the diff\&. Multiple values are separated by comma,
\fBnone\fR
resets previous values,
\fBdefault\fR
reset the list to
\fBnew\fR
and
\fBall\fR
is a shorthand for
\fBold\fR,new,context\&. When this option is not given, and the configuration variable
\fBdiff\&.wsErrorHighlight\fR
is not set, only whitespace errors in
\fBnew\fR
lines are highlighted\&. The whitespace errors are colored with
\fBcolor\&.diff\&.whitespace\fR\&.
.RE
.PP
\fB\-\-full\-index\fR
.RS 4
Instead of the first handful of characters, show the full pre\- and post\-image blob object names on the "index" line when generating patch format output\&.
.RE
.PP
\fB\-\-binary\fR
.RS 4
In addition to
\fB\-\-full\-index\fR, output a binary diff that can be applied with
\fBgit\-apply\fR\&. Implies
\fB\-\-patch\fR\&.
.RE
.PP
\fB\-\-abbrev\fR[\fB=\fR\fI<n>\fR]
.RS 4
Instead of showing the full 40\-byte hexadecimal object name in diff\-raw format output and diff\-tree header lines, show the shortest prefix that is at least
\fI<n>\fR
hexdigits long that uniquely refers the object\&. In diff\-patch output format,
\fB\-\-full\-index\fR
takes higher precedence, i\&.e\&. if
\fB\-\-full\-index\fR
is specified, full blob names will be shown regardless of
\fB\-\-abbrev\fR\&. Non default number of digits can be specified with
\fB\-\-abbrev=\fR\fI<n>\fR\&.
.RE
.PP
\fB\-B\fR[\fI<n>\fR][\fB/\fR\fI<m>\fR], \fB\-\-break\-rewrites\fR[\fB=\fR[\fI<n>\fR][\fB/\fR\fI<m>\fR]]
.RS 4
Break complete rewrite changes into pairs of delete and create\&. This serves two purposes:
.sp
It affects the way a change that amounts to a total rewrite of a file not as a series of deletion and insertion mixed together with a very few lines that happen to match textually as the context, but as a single deletion of everything old followed by a single insertion of everything new, and the number
\fI<m>\fR
controls this aspect of the
\fB\-B\fR
option (defaults to 60%)\&.
\fB\-B/70%\fR
specifies that less than 30% of the original should remain in the result for Git to consider it a total rewrite (i\&.e\&. otherwise the resulting patch will be a series of deletion and insertion mixed together with context lines)\&.
.sp
When used with
\fB\-M\fR, a totally\-rewritten file is also considered as the source of a rename (usually
\fB\-M\fR
only considers a file that disappeared as the source of a rename), and the number
\fI<n>\fR
controls this aspect of the
\fB\-B\fR
option (defaults to 50%)\&.
\fB\-B20%\fR
specifies that a change with addition and deletion compared to 20% or more of the file\(cqs size are eligible for being picked up as a possible source of a rename to another file\&.
.RE
.PP
\fB\-M\fR[\fI<n>\fR], \fB\-\-find\-renames\fR[\fB=\fR\fI<n>\fR]
.RS 4
Detect renames\&. If
\fI<n>\fR
is specified, it is a threshold on the similarity index (i\&.e\&. amount of addition/deletions compared to the file\(cqs size)\&. For example,
\fB\-M90%\fR
means Git should consider a delete/add pair to be a rename if more than 90% of the file hasn\(cqt changed\&. Without a
\fB%\fR
sign, the number is to be read as a fraction, with a decimal point before it\&. I\&.e\&.,
\fB\-M5\fR
becomes 0\&.5, and is thus the same as
\fB\-M50%\fR\&. Similarly,
\fB\-M05\fR
is the same as
\fB\-M5%\fR\&. To limit detection to exact renames, use
\fB\-M100%\fR\&. The default similarity index is 50%\&.
.RE
.PP
\fB\-C\fR[\fI<n>\fR], \fB\-\-find\-copies\fR[\fB=\fR\fI<n>\fR]
.RS 4
Detect copies as well as renames\&. See also
\fB\-\-find\-copies\-harder\fR\&. If
\fI<n>\fR
is specified, it has the same meaning as for
\fB\-M\fR\fI<n>\fR\&.
.RE
.PP
\fB\-\-find\-copies\-harder\fR
.RS 4
For performance reasons, by default,
\fB\-C\fR
option finds copies only if the original file of the copy was modified in the same changeset\&. This flag makes the command inspect unmodified files as candidates for the source of copy\&. This is a very expensive operation for large projects, so use it with caution\&. Giving more than one
\fB\-C\fR
option has the same effect\&.
.RE
.PP
\fB\-D\fR, \fB\-\-irreversible\-delete\fR
.RS 4
Omit the preimage for deletes, i\&.e\&. print only the header but not the diff between the preimage and
\fB/dev/null\fR\&. The resulting patch is not meant to be applied with
\fBpatch\fR
or
\fBgit\fR
\fBapply\fR; this is solely for people who want to just concentrate on reviewing the text after the change\&. In addition, the output obviously lacks enough information to apply such a patch in reverse, even manually, hence the name of the option\&.
.sp
When used together with
\fB\-B\fR, omit also the preimage in the deletion part of a delete/create pair\&.
.RE
.PP
\fB\-l\fR\fI<num>\fR
.RS 4
The
\fB\-M\fR
and
\fB\-C\fR
options involve some preliminary steps that can detect subsets of renames/copies cheaply, followed by an exhaustive fallback portion that compares all remaining unpaired destinations to all relevant sources\&. (For renames, only remaining unpaired sources are relevant; for copies, all original sources are relevant\&.) For N sources and destinations, this exhaustive check is O(N^2)\&. This option prevents the exhaustive portion of rename/copy detection from running if the number of source/destination files involved exceeds the specified number\&. Defaults to
\fBdiff\&.renameLimit\fR\&. Note that a value of 0 is treated as unlimited\&.
.RE
.PP
\fB\-\-diff\-filter=\fR[(\fBA\fR|\fBC\fR|\fBD\fR|\fBM\fR|\fBR\fR|\fBT\fR|\fBU\fR|\fBX\fR|\fBB\fR)\fB\&.\&.\&.\fR[\fB*\fR]]
.RS 4
Select only files that are Added (\fBA\fR), Copied (\fBC\fR), Deleted (\fBD\fR), Modified (\fBM\fR), Renamed (\fBR\fR), have their type (i\&.e\&. regular file, symlink, submodule, \&...\:) changed (\fBT\fR), are Unmerged (\fBU\fR), are Unknown (\fBX\fR), or have had their pairing Broken (\fBB\fR)\&. Any combination of the filter characters (including none) can be used\&. When
\fB*\fR
(All\-or\-none) is added to the combination, all paths are selected if there is any file that matches other criteria in the comparison; if there is no file that matches other criteria, nothing is selected\&.
.sp
Also, these upper\-case letters can be downcased to exclude\&. E\&.g\&.
\fB\-\-diff\-filter=ad\fR
excludes added and deleted paths\&.
.sp
Note that not all diffs can feature all types\&. For instance, copied and renamed entries cannot appear if detection for those types is disabled\&.
.RE
.PP
\fB\-S\fR\fI<string>\fR
.RS 4
Look for differences that change the number of occurrences of the specified
\fI<string>\fR
(i\&.e\&. addition/deletion) in a file\&. Intended for the scripter\(cqs use\&.
.sp
It is useful when you\(cqre looking for an exact block of code (like a struct), and want to know the history of that block since it first came into being: use the feature iteratively to feed the interesting block in the preimage back into
\fB\-S\fR, and keep going until you get the very first version of the block\&.
.sp
Binary files are searched as well\&.
.RE
.PP
\fB\-G\fR\fI<regex>\fR
.RS 4
Look for differences whose patch text contains added/removed lines that match
\fI<regex>\fR\&.
.sp
To illustrate the difference between
\fB\-S\fR\fI<regex>\fR
\fB\-\-pickaxe\-regex\fR
and
\fB\-G\fR\fI<regex>\fR, consider a commit with the following diff in the same file:
.sp
.if n \{\
.RS 4
.\}
.nf
+    return frotz(nitfol, two\->ptr, 1, 0);
\&.\&.\&.
\-    hit = frotz(nitfol, mf2\&.ptr, 1, 0);
.fi
.if n \{\
.RE
.\}
.sp
While
\fBgit\fR
\fBlog\fR
\fB\-G\fR"frotz\e(\fBnitfol\fR" will show this commit,
\fBgit\fR
\fBlog\fR
\fB\-S\fR"frotz\e(\fBnitfol\fR"
\fB\-\-pickaxe\-regex\fR
will not (because the number of occurrences of that string did not change)\&.
.sp
Unless
\fB\-\-text\fR
is supplied patches of binary files without a textconv filter will be ignored\&.
.sp
See the
\fIpickaxe\fR
entry in
\fBgitdiffcore\fR(7)
for more information\&.
.RE
.PP
\fB\-\-find\-object=\fR\fI<object\-id>\fR
.RS 4
Look for differences that change the number of occurrences of the specified object\&. Similar to
\fB\-S\fR, just the argument is different in that it doesn\(cqt search for a specific string but for a specific object id\&.
.sp
The object can be a blob or a submodule commit\&. It implies the
\fB\-t\fR
option in
\fBgit\-log\fR
to also find trees\&.
.RE
.PP
\fB\-\-pickaxe\-all\fR
.RS 4
When
\fB\-S\fR
or
\fB\-G\fR
finds a change, show all the changes in that changeset, not just the files that contain the change in
\fI<string>\fR\&.
.RE
.PP
\fB\-\-pickaxe\-regex\fR
.RS 4
Treat the
\fI<string>\fR
given to
\fB\-S\fR
as an extended POSIX regular expression to match\&.
.RE
.PP
\fB\-O\fR\fI<orderfile>\fR
.RS 4
Control the order in which files appear in the output\&. This overrides the
\fBdiff\&.orderFile\fR
configuration variable (see
\fBgit-config\fR(1))\&. To cancel
\fBdiff\&.orderFile\fR, use
\fB\-O/dev/null\fR\&.
.sp
The output order is determined by the order of glob patterns in
\fI<orderfile>\fR\&. All files with pathnames that match the first pattern are output first, all files with pathnames that match the second pattern (but not the first) are output next, and so on\&. All files with pathnames that do not match any pattern are output last, as if there was an implicit match\-all pattern at the end of the file\&. If multiple pathnames have the same rank (they match the same pattern but no earlier patterns), their output order relative to each other is the normal order\&.
.sp
\fI<orderfile>\fR
is parsed as follows:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Blank lines are ignored, so they can be used as separators for readability\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Lines starting with a hash ("#") are ignored, so they can be used for comments\&. Add a backslash ("\fB\e\fR") to the beginning of the pattern if it starts with a hash\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Each other line contains a single pattern\&.
.RE
.sp
Patterns have the same syntax and semantics as patterns used for
\fBfnmatch\fR(3) without the
\fBFNM_PATHNAME\fR
flag, except a pathname also matches a pattern if removing any number of the final pathname components matches the pattern\&. For example, the pattern "\fBfoo*bar\fR" matches "\fBfooasdfbar\fR" and "\fBfoo/bar/baz/asdf\fR" but not "\fBfoobarx\fR"\&.
.RE
.PP
\fB\-\-skip\-to=\fR\fI<file>\fR, \fB\-\-rotate\-to=\fR\fI<file>\fR
.RS 4
Discard the files before the named
\fI<file>\fR
from the output (i\&.e\&.
\fIskip to\fR), or move them to the end of the output (i\&.e\&.
\fIrotate to\fR)\&. These options were invented primarily for the use of the
\fBgit\fR
\fBdifftool\fR
command, and may not be very useful otherwise\&.
.RE
.PP
\fB\-R\fR
.RS 4
Swap two inputs; that is, show differences from index or on\-disk file to tree contents\&.
.RE
.PP
\fB\-\-relative\fR[\fB=\fR\fI<path>\fR], \fB\-\-no\-relative\fR
.RS 4
When run from a subdirectory of the project, it can be told to exclude changes outside the directory and show pathnames relative to it with this option\&. When you are not in a subdirectory (e\&.g\&. in a bare repository), you can name which subdirectory to make the output relative to by giving a
\fI<path>\fR
as an argument\&.
\fB\-\-no\-relative\fR
can be used to countermand both
\fBdiff\&.relative\fR
config option and previous
\fB\-\-relative\fR\&.
.RE
.PP
\fB\-a\fR, \fB\-\-text\fR
.RS 4
Treat all files as text\&.
.RE
.PP
\fB\-\-ignore\-cr\-at\-eol\fR
.RS 4
Ignore carriage\-return at the end of line when doing a comparison\&.
.RE
.PP
\fB\-\-ignore\-space\-at\-eol\fR
.RS 4
Ignore changes in whitespace at EOL\&.
.RE
.PP
\fB\-b\fR, \fB\-\-ignore\-space\-change\fR
.RS 4
Ignore changes in amount of whitespace\&. This ignores whitespace at line end, and considers all other sequences of one or more whitespace characters to be equivalent\&.
.RE
.PP
\fB\-w\fR, \fB\-\-ignore\-all\-space\fR
.RS 4
Ignore whitespace when comparing lines\&. This ignores differences even if one line has whitespace where the other line has none\&.
.RE
.PP
\fB\-\-ignore\-blank\-lines\fR
.RS 4
Ignore changes whose lines are all blank\&.
.RE
.PP
\fB\-I\fR\fI<regex>\fR, \fB\-\-ignore\-matching\-lines=\fR\fI<regex>\fR
.RS 4
Ignore changes whose all lines match
\fI<regex>\fR\&. This option may be specified more than once\&.
.RE
.PP
\fB\-\-inter\-hunk\-context=\fR\fI<number>\fR
.RS 4
Show the context between diff hunks, up to the specified
\fI<number>\fR
of lines, thereby fusing hunks that are close to each other\&. Defaults to
\fBdiff\&.interHunkContext\fR
or 0 if the config option is unset\&.
.RE
.PP
\fB\-W\fR, \fB\-\-function\-context\fR
.RS 4
Show whole function as context lines for each change\&. The function names are determined in the same way as
\fBgit\fR
\fBdiff\fR
works out patch hunk headers (see "Defining a custom hunk\-header" in
\fBgitattributes\fR(5))\&.
.RE
.PP
\fB\-\-exit\-code\fR
.RS 4
Make the program exit with codes similar to
\fBdiff\fR(1)\&. That is, it exits with 1 if there were differences and 0 means no differences\&.
.RE
.PP
\fB\-\-quiet\fR
.RS 4
Disable all output of the program\&. Implies
\fB\-\-exit\-code\fR\&. Disables execution of external diff helpers whose exit code is not trusted, i\&.e\&. their respective configuration option
\fBdiff\&.trustExitCode\fR
or
\fBdiff\&.\fR\fI<driver>\fR\&.\fBtrustExitCode\fR
or environment variable
\fBGIT_EXTERNAL_DIFF_TRUST_EXIT_CODE\fR
is false\&.
.RE
.PP
\fB\-\-ext\-diff\fR
.RS 4
Allow an external diff helper to be executed\&. If you set an external diff driver with
\fBgitattributes\fR(5), you need to use this option with
\fBgit-log\fR(1)
and friends\&.
.RE
.PP
\fB\-\-no\-ext\-diff\fR
.RS 4
Disallow external diff drivers\&.
.RE
.PP
\fB\-\-textconv\fR, \fB\-\-no\-textconv\fR
.RS 4
Allow (or disallow) external text conversion filters to be run when comparing binary files\&. See
\fBgitattributes\fR(5)
for details\&. Because textconv filters are typically a one\-way conversion, the resulting diff is suitable for human consumption, but cannot be applied\&. For this reason, textconv filters are enabled by default only for
\fBgit-diff\fR(1)
and
\fBgit-log\fR(1), but not for
\fBgit-format-patch\fR(1)
or diff plumbing commands\&.
.RE
.PP
\fB\-\-ignore\-submodules\fR[\fB=\fR(\fBnone\fR|\fBuntracked\fR|\fBdirty\fR|\fBall\fR)]
.RS 4
Ignore changes to submodules in the diff generation\&.
\fBall\fR
is the default\&. Using
\fBnone\fR
will consider the submodule modified when it either contains untracked or modified files or its
\fBHEAD\fR
differs from the commit recorded in the superproject and can be used to override any settings of the
\fBignore\fR
option in
\fBgit-config\fR(1)
or
\fBgitmodules\fR(5)\&. When
\fBuntracked\fR
is used submodules are not considered dirty when they only contain untracked content (but they are still scanned for modified content)\&. Using
\fBdirty\fR
ignores all changes to the work tree of submodules, only changes to the commits stored in the superproject are shown (this was the behavior until 1\&.7\&.0)\&. Using
\fBall\fR
hides all changes to submodules\&.
.RE
.PP
\fB\-\-src\-prefix=\fR\fI<prefix>\fR
.RS 4
Show the given source
\fI<prefix>\fR
instead of "a/"\&.
.RE
.PP
\fB\-\-dst\-prefix=\fR\fI<prefix>\fR
.RS 4
Show the given destination
\fI<prefix>\fR
instead of "b/"\&.
.RE
.PP
\fB\-\-no\-prefix\fR
.RS 4
Do not show any source or destination prefix\&.
.RE
.PP
\fB\-\-default\-prefix\fR
.RS 4
Use the default source and destination prefixes ("a/" and "b/")\&. This overrides configuration variables such as
\fBdiff\&.noprefix\fR,
\fBdiff\&.srcPrefix\fR,
\fBdiff\&.dstPrefix\fR, and
\fBdiff\&.mnemonicPrefix\fR
(see
\fBgit-config\fR(1))\&.
.RE
.PP
\fB\-\-line\-prefix=\fR\fI<prefix>\fR
.RS 4
Prepend an additional
\fI<prefix>\fR
to every line of output\&.
.RE
.PP
\fB\-\-ita\-invisible\-in\-index\fR
.RS 4
By default entries added by
\fBgit\fR
\fBadd\fR
\fB\-N\fR
appear as an existing empty file in
\fBgit\fR
\fBdiff\fR
and a new file in
\fBgit\fR
\fBdiff\fR
\fB\-\-cached\fR\&. This option makes the entry appear as a new file in
\fBgit\fR
\fBdiff\fR
and non\-existent in
\fBgit\fR
\fBdiff\fR
\fB\-\-cached\fR\&. This option could be reverted with
\fB\-\-ita\-visible\-in\-index\fR\&. Both options are experimental and could be removed in future\&.
.RE
.PP
\-\-max\-depth=<depth>
.RS 4
For each pathspec given on command line, descend at most
\fI<depth>\fR
levels of directories\&. A value of
\fB\-1\fR
means no limit\&. Cannot be combined with wildcards in the pathspec\&. Given a tree containing
\fBfoo/bar/baz\fR, the following list shows the matches generated by each set of options:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB\-\-max\-depth=0\fR
\fB\-\-\fR
\fBfoo\fR:
\fBfoo\fR
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB\-\-max\-depth=1\fR
\fB\-\-\fR
\fBfoo\fR:
\fBfoo/bar\fR
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB\-\-max\-depth=1\fR
\fB\-\-\fR
\fBfoo/bar\fR:
\fBfoo/bar/baz\fR
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB\-\-max\-depth=1\fR
\fB\-\-\fR
\fBfoo\fR
\fBfoo/bar\fR:
\fBfoo/bar/baz\fR
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB\-\-max\-depth=2\fR
\fB\-\-\fR
\fBfoo\fR:
\fBfoo/bar/baz\fR
.RE
.sp
If no pathspec is given, the depth is measured as if all top\-level entries were specified\&. Note that this is different than measuring from the root, in that
\fB\-\-max\-depth=0\fR
would still return
\fBfoo\fR\&. This allows you to still limit depth while asking for a subset of the top\-level entries\&.
.sp
Note that this option is only supported for diffs between tree objects, not against the index or working tree\&.
.RE
.sp
For more detailed explanation on these common options, see also \fBgitdiffcore\fR(7)\&.
.PP
<tree\-ish>
.RS 4
The id of a tree object to diff against\&.
.RE
.PP
\-\-cached
.RS 4
Do not consider the on\-disk file at all\&.
.RE
.PP
\-\-merge\-base
.RS 4
Instead of comparing <tree\-ish> directly, use the merge base between <tree\-ish> and HEAD instead\&. <tree\-ish> must be a commit\&.
.RE
.PP
\-m
.RS 4
By default, files recorded in the index but not checked out are reported as deleted\&. This flag makes
\fIgit diff\-index\fR
say that all non\-checked\-out files are up to date\&.
.RE
.SH "RAW OUTPUT FORMAT"
.sp
The raw output format from \fBgit\-diff\-index\fR, \fBgit\-diff\-tree\fR, \fBgit\-diff\-files\fR and \fBgit\fR \fBdiff\fR \fB\-\-raw\fR are very similar\&.
.sp
These commands all compare two sets of things; what is compared differs:
.PP
\fBgit\-diff\-index\fR \fI<tree\-ish>\fR
.RS 4
compares the
\fI<tree\-ish>\fR
and the files on the filesystem\&.
.RE
.PP
\fBgit\-diff\-index\fR \fB\-\-cached\fR \fI<tree\-ish>\fR
.RS 4
compares the
\fI<tree\-ish>\fR
and the index\&.
.RE
.PP
\fBgit\-diff\-tree\fR [\fB\-r\fR] \fI<tree\-ish\-1>\fR \fI<tree\-ish\-2>\fR [\fI<pattern>\fR\&.\&.\&.]
.RS 4
compares the trees named by the two arguments\&.
.RE
.PP
\fBgit\-diff\-files\fR [\fI<pattern>\fR\&.\&.\&.]
.RS 4
compares the index and the files on the filesystem\&.
.RE
.sp
The \fBgit\-diff\-tree\fR command begins its output by printing the hash of what is being compared\&. After that, all the commands print one output line per changed file\&.
.sp
An output line is formatted this way:
.sp
.if n \{\
.RS 4
.\}
.nf
in\-place edit  :100644 100644 bcd1234 0123456 M file0
copy\-edit      :100644 100644 abcd123 1234567 C68 file1 file2
rename\-edit    :100644 100644 abcd123 1234567 R86 file1 file3
create         :000000 100644 0000000 1234567 A file4
delete         :100644 000000 1234567 0000000 D file5
unmerged       :000000 000000 0000000 0000000 U file6
.fi
.if n \{\
.RE
.\}
.sp
That is, from the left to the right:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
a colon\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
mode for "src"; 000000 if creation or unmerged\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
a space\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
mode for "dst"; 000000 if deletion or unmerged\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  5." 4.2
.\}
a space\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 6.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  6." 4.2
.\}
sha1 for "src"; 0{40} if creation or unmerged\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 7.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  7." 4.2
.\}
a space\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 8.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  8." 4.2
.\}
sha1 for "dst"; 0{40} if deletion, unmerged or "work tree out of sync with the index"\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 9.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  9." 4.2
.\}
a space\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'10.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "10." 4.2
.\}
status, followed by optional "score" number\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'11.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "11." 4.2
.\}
a tab or a NUL when
\fB\-z\fR
option is used\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'12.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "12." 4.2
.\}
path for "src"
.RE
.sp
.RS 4
.ie n \{\
\h'-04'13.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "13." 4.2
.\}
a tab or a NUL when
\fB\-z\fR
option is used; only exists for C or R\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'14.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "14." 4.2
.\}
path for "dst"; only exists for C or R\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'15.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "15." 4.2
.\}
an LF or a NUL when
\fB\-z\fR
option is used, to terminate the record\&.
.RE
.sp
Possible status letters are:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBA\fR: addition of a file
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBC\fR: copy of a file into a new one
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBD\fR: deletion of a file
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBM\fR: modification of the contents or mode of a file
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBR\fR: renaming of a file
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBT\fR: change in the type of the file (regular file, symbolic link or submodule)
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBU\fR: file is unmerged (you must complete the merge before it can be committed)
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBX\fR: "unknown" change type (most probably a bug, please report it)
.RE
.sp
Status letters \fBC\fR and \fBR\fR are always followed by a score (denoting the percentage of similarity between the source and target of the move or copy)\&. Status letter \fBM\fR may be followed by a score (denoting the percentage of dissimilarity) for file rewrites\&.
.sp
The sha1 for "dst" is shown as all 0\(cqs if a file on the filesystem is out of sync with the index\&.
.sp
Example:
.sp
.if n \{\
.RS 4
.\}
.nf
:100644 100644 5be4a4a 0000000 M file\&.c
.fi
.if n \{\
.RE
.\}
.sp
Without the \fB\-z\fR option, pathnames with "unusual" characters are quoted as explained for the configuration variable \fBcore\&.quotePath\fR (see \fBgit-config\fR(1))\&. Using \fB\-z\fR the filename is output verbatim and the line is terminated by a NUL byte\&.
.SH "DIFF FORMAT FOR MERGES"
.sp
\fBgit\-diff\-tree\fR, \fBgit\-diff\-files\fR and \fBgit\-diff\fR \fB\-\-raw\fR can take \fB\-c\fR or \fB\-\-cc\fR option to generate diff output also for merge commits\&. The output differs from the format described above in the following way:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
there is a colon for each parent
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
there are more "src" modes and "src" sha1
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
status is concatenated status characters for each parent
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
no optional "score" number
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  5." 4.2
.\}
tab\-separated pathname(s) of the file
.RE
.sp
For \fB\-c\fR and \fB\-\-cc\fR, only the destination or final path is shown even if the file was renamed on any side of history\&. With \fB\-\-combined\-all\-paths\fR, the name of the path in each parent is shown followed by the name of the path in the merge commit\&.
.sp
Examples for \fB\-c\fR and \fB\-\-cc\fR without \fB\-\-combined\-all\-paths\fR:
.sp
.if n \{\
.RS 4
.\}
.nf
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM       desc\&.c
::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM       bar\&.sh
::100644 100644 100644 e07d6c5 9042e82 ee91881 RR       phooey\&.c
.fi
.if n \{\
.RE
.\}
.sp
Examples when \fB\-\-combined\-all\-paths\fR added to either \fB\-c\fR or \fB\-\-cc\fR:
.sp
.if n \{\
.RS 4
.\}
.nf
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM       desc\&.c  desc\&.c  desc\&.c
::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM       foo\&.sh  bar\&.sh  bar\&.sh
::100644 100644 100644 e07d6c5 9042e82 ee91881 RR       fooey\&.c fuey\&.c  phooey\&.c
.fi
.if n \{\
.RE
.\}
.sp
Note that \fIcombined diff\fR lists only files which were modified from all parents\&.
.SH "GENERATING PATCH TEXT WITH \-P"
.sp
Running \fBgit-diff\fR(1), \fBgit-log\fR(1), \fBgit-show\fR(1), \fBgit-diff-index\fR(1), \fBgit-diff-tree\fR(1), or \fBgit-diff-files\fR(1) with the \fB\-p\fR option produces patch text\&. You can customize the creation of patch text via the \fBGIT_EXTERNAL_DIFF\fR and the \fBGIT_DIFF_OPTS\fR environment variables (see \fBgit\fR(1)), and the \fBdiff\fR attribute (see \fBgitattributes\fR(5))\&.
.sp
What the \fB\-p\fR option produces is slightly different from the traditional diff format:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
It is preceded by a "git diff" header that looks like this:
.sp
.if n \{\
.RS 4
.\}
.nf
diff \-\-git a/file1 b/file2
.fi
.if n \{\
.RE
.\}
.sp
The
\fBa/\fR
and
\fBb/\fR
filenames are the same unless rename/copy is involved\&. Especially, even for a creation or a deletion,
\fB/dev/null\fR
is
\fInot\fR
used in place of the
\fBa/\fR
or
\fBb/\fR
filenames\&.
.sp
When a rename/copy is involved,
\fBfile1\fR
and
\fBfile2\fR
show the name of the source file of the rename/copy and the name of the file that the rename/copy produces, respectively\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
It is followed by one or more extended header lines:
.sp
.if n \{\
.RS 4
.\}
.nf
\fBold\fR \fBmode\fR \fI<mode>\fR
\fBnew\fR \fBmode\fR \fI<mode>\fR
\fBdeleted\fR \fBfile\fR \fBmode\fR \fI<mode>\fR
\fBnew\fR \fBfile\fR \fBmode\fR \fI<mode>\fR
\fBcopy\fR \fBfrom\fR \fI<path>\fR
\fBcopy\fR \fBto\fR \fI<path>\fR
\fBrename\fR \fBfrom\fR \fI<path>\fR
\fBrename\fR \fBto\fR \fI<path>\fR
\fBsimilarity\fR \fBindex\fR \fI<number>\fR
\fBdissimilarity\fR \fBindex\fR \fI<number>\fR
\fBindex\fR \fI<hash>\fR\fB\&.\&.\fR\fI<hash>\fR \fI<mode>\fR
.fi
.if n \{\
.RE
.\}
File modes
\fI<mode>\fR
are printed as 6\-digit octal numbers including the file type and file permission bits\&.
.sp
Path names in extended headers do not include the
\fBa/\fR
and
\fBb/\fR
prefixes\&.
.sp
The similarity index is the percentage of unchanged lines, and the dissimilarity index is the percentage of changed lines\&. It is a rounded down integer, followed by a percent sign\&. The similarity index value of 100% is thus reserved for two equal files, while 100% dissimilarity means that no line from the old file made it into the new one\&.
.sp
The index line includes the blob object names before and after the change\&. The
\fI<mode>\fR
is included if the file mode does not change; otherwise, separate lines indicate the old and the new mode\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
Pathnames with "unusual" characters are quoted as explained for the configuration variable
\fBcore\&.quotePath\fR
(see
\fBgit-config\fR(1))\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
All the
\fBfile1\fR
files in the output refer to files before the commit, and all the
\fBfile2\fR
files refer to files after the commit\&. It is incorrect to apply each change to each file sequentially\&. For example, this patch will swap a and b:
.sp
.if n \{\
.RS 4
.\}
.nf
diff \-\-git a/a b/b
rename from a
rename to b
diff \-\-git a/b b/a
rename from b
rename to a
.fi
.if n \{\
.RE
.\}
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  5." 4.2
.\}
Hunk headers mention the name of the function to which the hunk applies\&. See "Defining a custom hunk\-header" in
\fBgitattributes\fR(5)
for details of how to tailor this to specific languages\&.
.RE
.SH "COMBINED DIFF FORMAT"
.sp
Any diff\-generating command can take the \fB\-c\fR or \fB\-\-cc\fR option to produce a \fIcombined diff\fR when showing a merge\&. This is the default format when showing merges with \fBgit-diff\fR(1) or \fBgit-show\fR(1)\&. Note also that you can give suitable \fB\-\-diff\-merges\fR option to any of these commands to force generation of diffs in a specific format\&.
.sp
A "combined diff" format looks like this:
.sp
.if n \{\
.RS 4
.\}
.nf
diff \-\-combined describe\&.c
index fabadb8,cc95eb0\&.\&.4866510
\-\-\- a/describe\&.c
+++ b/describe\&.c
@@@ \-98,20 \-98,12 +98,20 @@@
        return (a_date > b_date) ? \-1 : (a_date == b_date) ? 0 : 1;
  }

\- static void describe(char *arg)
 \-static void describe(struct commit *cmit, int last_one)
++static void describe(char *arg, int last_one)
  {
 +      unsigned char sha1[20];
 +      struct commit *cmit;
        struct commit_list *list;
        static int initialized = 0;
        struct commit_name *n;

 +      if (get_sha1(arg, sha1) < 0)
 +              usage(describe_usage);
 +      cmit = lookup_commit_reference(sha1);
 +      if (!cmit)
 +              usage(describe_usage);
 +
        if (!initialized) {
                initialized = 1;
                for_each_ref(get_name);
.fi
.if n \{\
.RE
.\}
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
It is preceded by a "git diff" header, that looks like this (when the
\fB\-c\fR
option is used):
.sp
.if n \{\
.RS 4
.\}
.nf
diff \-\-combined file
.fi
.if n \{\
.RE
.\}
.sp
or like this (when the
\fB\-\-cc\fR
option is used):
.sp
.if n \{\
.RS 4
.\}
.nf
diff \-\-cc file
.fi
.if n \{\
.RE
.\}
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
It is followed by one or more extended header lines (this example shows a merge with two parents):
.sp
.if n \{\
.RS 4
.\}
.nf
\fBindex\fR \fI<hash>\fR\fB,\fR\fI<hash>\fR\fB\&.\&.\fR\fI<hash>\fR
\fBmode\fR \fI<mode>\fR\fB,\fR\fI<mode>\fR\fB\&.\&.\fR\fI<mode>\fR
\fBnew\fR \fBfile\fR \fBmode\fR \fI<mode>\fR
\fBdeleted\fR \fBfile\fR \fBmode\fR \fI<mode>\fR\fB,\fR\fI<mode>\fR
.fi
.if n \{\
.RE
.\}
The
\fBmode\fR
\fI<mode>\fR\fB,\fR\fI<mode>\fR\fB\&.\&.\fR\fI<mode>\fR
line appears only if at least one of the <mode> is different from the rest\&. Extended headers with information about detected content movement (renames and copying detection) are designed to work with the diff of two
\fI<tree\-ish>\fR
and are not used by combined diff format\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
It is followed by a two\-line from\-file/to\-file header:
.sp
.if n \{\
.RS 4
.\}
.nf
\-\-\- a/file
+++ b/file
.fi
.if n \{\
.RE
.\}
.sp
Similar to the two\-line header for the traditional
\fIunified\fR
diff format,
\fB/dev/null\fR
is used to signal created or deleted files\&.
.sp
However, if the \-\-combined\-all\-paths option is provided, instead of a two\-line from\-file/to\-file, you get an N+1 line from\-file/to\-file header, where N is the number of parents in the merge commit:
.sp
.if n \{\
.RS 4
.\}
.nf
\-\-\- a/file
\-\-\- a/file
\-\-\- a/file
+++ b/file
.fi
.if n \{\
.RE
.\}
.sp
This extended format can be useful if rename or copy detection is active, to allow you to see the original name of the file in different parents\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
Chunk header format is modified to prevent people from accidentally feeding it to
\fBpatch\fR
\fB\-p1\fR\&. Combined diff format was created for review of merge commit changes, and was not meant to be applied\&. The change is similar to the change in the extended
\fIindex\fR
header:
.sp
.if n \{\
.RS 4
.\}
.nf
@@@ <from\-file\-range> <from\-file\-range> <to\-file\-range> @@@
.fi
.if n \{\
.RE
.\}
.sp
There are (number of parents + 1)
\fB@\fR
characters in the chunk header for combined diff format\&.
.RE
.sp
Unlike the traditional \fIunified\fR diff format, which shows two files A and B with a single column that has \fB\-\fR (minus \(em appears in A but removed in B), \fB+\fR (plus \(em missing in A but added to B), or " " (space \(em unchanged) prefix, this format compares two or more files file1, file2,\&...\: with one file X, and shows how X differs from each of fileN\&. One column for each of fileN is prepended to the output line to note how X\(cqs line is different from it\&.
.sp
A \fB\-\fR character in the column N means that the line appears in fileN but it does not appear in the result\&. A \fB+\fR character in the column N means that the line appears in the result, and fileN does not have that line (in other words, the line was added, from the point of view of that parent)\&.
.sp
In the above example output, the function signature was changed from both files (hence two \fB\-\fR removals from both file1 and file2, plus \fB++\fR to mean one line that was added does not appear in either file1 or file2)\&. Also, eight other lines are the same from file1 but do not appear in file2 (hence prefixed with \fB+\fR)\&.
.sp
When shown by \fBgit\fR \fBdiff\-tree\fR \fB\-c\fR, it compares the parents of a merge commit with the merge result (i\&.e\&. file1\&.\&.fileN are the parents)\&. When shown by \fBgit\fR \fBdiff\-files\fR \fB\-c\fR, it compares the two unresolved merge parents with the working tree file (i\&.e\&. file1 is stage 2 aka "our version", file2 is stage 3 aka "their version")\&.
.SH "OTHER DIFF FORMATS"
.sp
The \fB\-\-summary\fR option describes newly added, deleted, renamed and copied files\&. The \fB\-\-stat\fR option adds \fBdiffstat\fR(1) graph to the output\&. These options can be combined with other options, such as \fB\-p\fR, and are meant for human consumption\&.
.sp
When showing a change that involves a rename or a copy, \fB\-\-stat\fR output formats the pathnames compactly by combining common prefix and suffix of the pathnames\&. For example, a change that moves \fBarch/i386/Makefile\fR to \fBarch/x86/Makefile\fR while modifying 4 lines will be shown like this:
.sp
.if n \{\
.RS 4
.\}
.nf
arch/{i386 => x86}/Makefile    |   4 +\-\-
.fi
.if n \{\
.RE
.\}
.sp
The \fB\-\-numstat\fR option gives the diffstat(1) information but is designed for easier machine consumption\&. An entry in \fB\-\-numstat\fR output looks like this:
.sp
.if n \{\
.RS 4
.\}
.nf
1       2       README
3       1       arch/{i386 => x86}/Makefile
.fi
.if n \{\
.RE
.\}
.sp
That is, from left to right:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
the number of added lines;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
a tab;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
the number of deleted lines;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
a tab;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  5." 4.2
.\}
pathname (possibly with rename/copy information);
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 6.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  6." 4.2
.\}
a newline\&.
.RE
.sp
When \fB\-z\fR output option is in effect, the output is formatted this way:
.sp
.if n \{\
.RS 4
.\}
.nf
1       2       README NUL
3       1       NUL arch/i386/Makefile NUL arch/x86/Makefile NUL
.fi
.if n \{\
.RE
.\}
.sp
That is:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
the number of added lines;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
a tab;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
the number of deleted lines;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
a tab;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  5." 4.2
.\}
a NUL (only exists if renamed/copied);
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 6.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  6." 4.2
.\}
pathname in preimage;
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 7.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  7." 4.2
.\}
a NUL (only exists if renamed/copied);
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 8.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  8." 4.2
.\}
pathname in postimage (only exists if renamed/copied);
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 9.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  9." 4.2
.\}
a NUL\&.
.RE
.sp
The extra \fBNUL\fR before the preimage path in renamed case is to allow scripts that read the output to tell if the current record being read is a single\-path record or a rename/copy record without reading ahead\&. After reading added and deleted lines, reading up to \fBNUL\fR would yield the pathname, but if that is \fBNUL\fR, the record will show two paths\&.
.SH "OPERATING MODES"
.sp
You can choose whether you want to trust the index file entirely (using the \fB\-\-cached\fR flag) or ask the diff logic to show any files that don\(cqt match the stat state as being "tentatively changed"\&. Both of these operations are very useful indeed\&.
.SH "CACHED MODE"
.sp
If \fB\-\-cached\fR is specified, it allows you to ask:
.sp
.if n \{\
.RS 4
.\}
.nf
show me the differences between HEAD and the current index
contents (the ones I\*(Aqd write using \*(Aqgit write\-tree\*(Aq)
.fi
.if n \{\
.RE
.\}
.sp
For example, let\(cqs say that you have worked on your working directory, updated some files in the index and are ready to commit\&. You want to see exactly \fBwhat\fR you are going to commit, without having to write a new tree object and compare it that way, and to do that, you just do
.sp
.if n \{\
.RS 4
.\}
.nf
git diff\-index \-\-cached HEAD
.fi
.if n \{\
.RE
.\}
.sp
Example: let\(cqs say I had renamed \fBcommit\&.c\fR to \fBgit\-commit\&.c\fR, and I had done an \fBupdate\-index\fR to make that effective in the index file\&. \fBgit\fR \fBdiff\-files\fR wouldn\(cqt show anything at all, since the index file matches my working directory\&. But doing a \fIgit diff\-index\fR does:
.sp
.if n \{\
.RS 4
.\}
.nf
torvalds@ppc970:~/git> git diff\-index \-\-cached HEAD
:100644 000000 4161aecc6700a2eb579e842af0b7f22b98443f74 0000000000000000000000000000000000000000 D	commit\&.c
:000000 100644 0000000000000000000000000000000000000000 4161aecc6700a2eb579e842af0b7f22b98443f74 A	git\-commit\&.c
.fi
.if n \{\
.RE
.\}
.sp
You can see easily that the above is a rename\&.
.sp
In fact, \fBgit\fR \fBdiff\-index\fR \fB\-\-cached\fR \fBshould\fR always be entirely equivalent to actually doing a \fIgit write\-tree\fR and comparing that\&. Except this one is much nicer for the case where you just want to check where you are\&.
.sp
So doing a \fBgit\fR \fBdiff\-index\fR \fB\-\-cached\fR is basically very useful when you are asking yourself "what have I already marked for being committed, and what\(cqs the difference to a previous tree"\&.
.SH "NON\-CACHED MODE"
.sp
The "non\-cached" mode takes a different approach, and is potentially the more useful of the two in that what it does can\(cqt be emulated with a \fIgit write\-tree\fR + \fIgit diff\-tree\fR\&. Thus that\(cqs the default mode\&. The non\-cached version asks the question:
.sp
.if n \{\
.RS 4
.\}
.nf
show me the differences between HEAD and the currently checked out
tree \- index contents _and_ files that aren\*(Aqt up to date
.fi
.if n \{\
.RE
.\}
.sp
which is obviously a very useful question too, since that tells you what you \fBcould\fR commit\&. Again, the output matches the \fIgit diff\-tree \-r\fR output to a tee, but with a twist\&.
.sp
The twist is that if some file doesn\(cqt match the index, we don\(cqt have a backing store thing for it, and we use the magic "all\-zero" sha1 to show that\&. So let\(cqs say that you have edited \fBkernel/sched\&.c\fR, but have not actually done a \fIgit update\-index\fR on it yet \- there is no "object" associated with the new state, and you get:
.sp
.if n \{\
.RS 4
.\}
.nf
torvalds@ppc970:~/v2\&.6/linux> git diff\-index \-\-abbrev HEAD
:100644 100644 7476bb5ba 000000000 M	kernel/sched\&.c
.fi
.if n \{\
.RE
.\}
.sp
i\&.e\&., it shows that the tree has changed, and that \fBkernel/sched\&.c\fR is not up to date and may contain new stuff\&. The all\-zero sha1 means that to get the real diff, you need to look at the object in the working directory directly rather than do an object\-to\-object diff\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.sp
As with other commands of this type, \fIgit diff\-index\fR does not actually look at the contents of the file at all\&. So maybe \fBkernel/sched\&.c\fR hasn\(cqt actually changed, and it\(cqs just that you touched it\&. In either case, it\(cqs a note that you need to \fIgit update\-index\fR it to make the index be in sync\&.
.sp .5v
.RE
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.sp
You can have a mixture of files show up as "has been updated" and "is still dirty in the working directory" together\&. You can always tell which file is in which state, since the "has been updated" ones show a valid sha1, and the "not in sync with the index" ones will always have the special all\-zero sha1\&.
.sp .5v
.RE
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite
