'\" t
.\" Title: git-diff-index
.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets vsnapshot
.\" Date: 01/14/2025
.\" Manual: Git Manual
.\" Source: Git 2.48.1
.\" Language: English
.\"
.TH "GIT\-DIFF\-INDEX" "1" "01/14/2025" "Git 2\&.48\&.1" "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] [] [\&...]
.fi
.sp
.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 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\fR, \fB\-\-unified=\fR\fI\fR
.RS 4
Generate diffs with
\fI\fR
lines of context instead of the usual three\&. Implies
\fB\-\-patch\fR\&.
.RE
.PP
\fB\-\-output=\fR\fI\fR
.RS 4
Output to a specific file instead of stdout\&.
.RE
.PP
\fB\-\-output\-indicator\-new=\fR\fI\fR, \fB\-\-output\-indicator\-old=\fR\fI\fR, \fB\-\-output\-indicator\-context=\fR\fI\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\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\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\fR[\fB,\fR\fI\fR[\fB,\fR\fI\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\fR\&. The width of the filename part can be limited by giving another width
\fI\fR
after a comma or by setting
\fBdiff\&.statNameWidth=\fR\fI\fR\&. The width of the graph part can be limited by using
\fB\-\-stat\-graph\-width=\fR\fI\fR
or by setting
\fBdiff\&.statGraphWidth=\fR\fI\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\fR, you can limit the output to the first
\fI\fR
lines, followed by \&.\&.\&. if there are more\&.
.sp
These parameters can also be set individually with
\fB\-\-stat\-width=\fR\fI\fR,
\fB\-\-stat\-name\-width=\fR\fI\fR
and
\fB\-\-stat\-count=\fR\fI\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\fR\fB,\&.\fR\&.\&.], \fB\-\-dirstat\fR[\fB=\fR\fI\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\-\-\fR*stat 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\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,10,cumulative\fR\&.
.RE
.PP
\fB\-\-cumulative\fR
.RS 4
Synonym for
\fB\-\-dirstat=cumulative\fR\&.
.RE
.PP
\fB\-\-dirstat\-by\-file\fR[\fB=\fR\fI\fR\fB,\&.\fR\&.\&.]
.RS 4
Synonym for
\fB\-\-dirstat=files,\fR\fI\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\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\fR]
.RS 4
Show colored diff\&.
\fB\-\-color\fR
(i\&.e\&. without
\fB=\fR\fI\fR) is the same as
\fB\-\-color=always\fR\&.
\fI\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\fR]
.RS 4
Moved lines of code are colored differently\&. The
\fI\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\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\fR]
.RS 4
By default, words are delimited by whitespace; see
\fB\-\-word\-diff\-regex\fR
below\&. The
\fI\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
\fB{\fBadded\fR}\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\fR
.RS 4
Use
\fI\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\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\fR]
.RS 4
Equivalent to
\fB\-\-word\-diff=color\fR
plus (if a regex was specified)
\fB\-\-word\-diff\-regex=\fR\fI\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\-\-\fR[\fBno\-\fR]\fBrename\-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\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,new,context\fR\&. 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\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\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\fR\&.
.RE
.PP
\fB\-B\fR[\fI\fR][\fB/\fR\fI\fR], \fB\-\-break\-rewrites\fR[\fB=\fR[\fI\fR][\fB/\fR\fI\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\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\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\fR], \fB\-\-find\-renames\fR[\fB=\fR\fI\fR]
.RS 4
Detect renames\&. If
\fI\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 % 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\fR], \fB\-\-find\-copies\fR[\fB=\fR\fI\fR]
.RS 4
Detect copies as well as renames\&. See also
\fB\-\-find\-copies\-harder\fR\&. If
\fI\fR
is specified, it has the same meaning as for
\fB\-M\fR\fI\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\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[*]]
.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 * (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\fR
.RS 4
Look for differences that change the number of occurrences of the specified
\fI\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\fR
.RS 4
Look for differences whose patch text contains added/removed lines that match
\fI\fR\&.
.sp
To illustrate the difference between
\fB\-S\fR\fI\fR
\fB\-\-pickaxe\-regex\fR
and
\fB\-G\fR\fI\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