'\" t
.\"     Title: git-diff-pairs
.\"    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-13
.\"    Manual: Git Manual
.\"    Source: Git 2.51.0.511.gac7d021f06
.\"  Language: English
.\"
.TH "GIT\-DIFF\-PAIRS" "1" "2025-10-13" "Git 2\&.51\&.0\&.511\&.gac7d02" "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-pairs \- Compare the content and mode of provided blob pairs
.SH "SYNOPSIS"
.sp
.nf
\fBgit\fR \fBdiff\-pairs\fR \fB\-z\fR [\fI<diff\-options>\fR]
.fi
.SH "DESCRIPTION"
.sp
Show changes for file pairs provided on stdin\&. Input for this command must be in the NUL\-terminated raw output format as generated by commands such as \fBgit\fR \fBdiff\-tree\fR \fB\-z\fR \fB\-r\fR \fB\-\-raw\fR\&. By default, the outputted diffs are computed and shown in the patch format when stdin closes\&.
.sp
A single NUL byte may be written to stdin between raw input lines to compute file pair diffs up to that point instead of waiting for stdin to close\&. A NUL byte is also written to the output to delimit between these batches of diffs\&.
.sp
Usage of this command enables the traditional diff pipeline to be broken up into separate stages where \fBdiff\-pairs\fR acts as the output phase\&. Other commands, such as \fBdiff\-tree\fR, may serve as a frontend to compute the raw diff format used as input\&.
.sp
Instead of computing diffs via \fBgit\fR \fBdiff\-tree\fR \fB\-p\fR \fB\-M\fR in one step, \fBdiff\-tree\fR can compute the file pairs and rename information without the blob diffs\&. This output can be fed to \fBdiff\-pairs\fR to generate the underlying blob diffs as done in the following example:
.sp
.if n \{\
.RS 4
.\}
.nf
git diff\-tree \-z \-r \-M $a $b |
git diff\-pairs \-z
.fi
.if n \{\
.RE
.\}
.sp
Computing the tree diff upfront with rename information allows patch output from \fBdiff\-pairs\fR to be progressively computed over the course of potentially multiple invocations\&.
.sp
Pathspecs are not currently supported by \fBdiff\-pairs\fR\&. Pathspec limiting should be performed by the upstream command generating the raw diffs used as input\&.
.sp
Tree objects are not currently supported as input and are rejected\&.
.sp
Abbreviated object IDs in the \fBdiff\-pairs\fR input are not supported\&. Outputted object IDs can be abbreviated using the \fB\-\-abbrev\fR option\&.
.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)\&.
.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 "GIT"
.sp
Part of the \fBgit\fR(1) suite
