// Please don't remove this comment as asciidoc behaves badly when
// the first non-empty line is ifdef/ifndef. The symptom is that
// without this comment the <git-diff-core> attribute conditionally
// defined below ends up being defined unconditionally.
// Last checked with asciidoc 7.0.2.

ifndef::git-format-patch[]
ifndef::git-diff[]
ifndef::git-log[]
:git-diff-core: 1
endif::git-log[]
endif::git-diff[]
endif::git-format-patch[]

ifdef::git-format-patch[]
-p::
--no-stat::
	Generate plain patches without any diffstats.
endif::git-format-patch[]

ifndef::git-format-patch[]
-p::
-u::
	Generate patch (see section on generating patches).
	{git-diff? This is the default.}
endif::git-format-patch[]

-U<n>::
--unified=<n>::
	Generate diffs with <n> lines of context instead of
	the usual three.
ifndef::git-format-patch[]
	Implies `-p`.
endif::git-format-patch[]

ifndef::git-format-patch[]
--raw::
	Generate the raw format.
	{git-diff-core? This is the default.}
endif::git-format-patch[]

ifndef::git-format-patch[]
--patch-with-raw::
	Synonym for `-p --raw`.
endif::git-format-patch[]

--patience::
	Generate a diff using the "patience diff" algorithm.

--stat[=width[,name-width]]::
	Generate a diffstat.  You can override the default
	output width for 80-column terminal by `--stat=width`.
	The width of the filename part can be controlled by
	giving another width to it separated by a comma.

--numstat::
	Similar to `\--stat`, 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 `-` instead of saying
	`0 0`.

--shortstat::
	Output only the last line of the `--stat` format containing total
	number of modified files, as well as number of added and deleted
	lines.

--dirstat[=limit]::
	Output the distribution of relative amount of changes (number of lines added or
	removed) for each sub-directory. Directories with changes below
	a cut-off percent (3% by default) are not shown. The cut-off percent
	can be set with `--dirstat=limit`. Changes in a child directory is not
	counted for the parent directory, unless `--cumulative` is used.

--dirstat-by-file[=limit]::
	Same as `--dirstat`, but counts changed files instead of lines.

--summary::
	Output a condensed summary of extended header information
	such as creations, renames and mode changes.

ifndef::git-format-patch[]
--patch-with-stat::
	Synonym for `-p --stat`.
endif::git-format-patch[]

ifndef::git-format-patch[]

-z::
ifdef::git-log[]
	Separate the commits with NULs instead of with new newlines.
+
Also, when `--raw` or `--numstat` has been given, do not munge
pathnames and use NULs as output field terminators.
endif::git-log[]
ifndef::git-log[]
	When `--raw`, `--numstat`, `--name-only` or `--name-status` has been
	given, do not munge pathnames and use NULs as output field terminators.
endif::git-log[]
+
Without this option, each pathname output will have TAB, LF, double quotes,
and backslash characters replaced with `\t`, `\n`, `\"`, and `\\`,
respectively, and the pathname will be enclosed in double quotes if
any of those replacements occurred.

--name-only::
	Show only names of changed files.

--name-status::
	Show only names and status of changed files. See the description
	of the `--diff-filter` option on what the status letters mean.

--submodule[=<format>]::
	Chose the output format for submodule differences. <format> can be one of
	'short' and 'log'. 'short' just shows pairs of commit names, this format
	is used when this option is not given. 'log' is the default value for this
	option and lists the commits in that commit range like the 'summary'
	option of linkgit:git-submodule[1] does.

--color[=<when>]::
	Show colored diff.
	The value must be always (the default), never, or auto.

--no-color::
	Turn off colored diff, even when the configuration file
	gives the default to color output.
	Same as `--color=never`.

--color-words[=<regex>]::
	Show colored word diff, i.e., color words which have changed.
	By default, words are separated by whitespace.
+
When a <regex> is specified, every non-overlapping match of the
<regex> is considered a word.  Anything between these matches is
considered whitespace and ignored(!) for the purposes of finding
differences.  You may want to append `|[^[:space:]]` 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.
+
The regex can also be set via a diff driver or configuration option, see
linkgit:gitattributes[1] or linkgit:git-config[1].  Giving it explicitly
overrides any diff driver or configuration setting.  Diff drivers
override configuration settings.
endif::git-format-patch[]

--no-renames::
	Turn off rename detection, even when the configuration
	file gives the default to do so.

ifndef::git-format-patch[]
--check::
	Warn if changes introduce trailing whitespace
	or an indent that uses a space before a tab. Exits with
	non-zero status if problems are found. Not compatible with
	--exit-code.
endif::git-format-patch[]

--full-index::
	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.

--binary::
	In addition to `--full-index`, output a binary diff that
	can be applied with `git-apply`.

--abbrev[=<n>]::
	Instead of showing the full 40-byte hexadecimal object
	name in diff-raw format output and diff-tree header
	lines, show only a partial prefix.  This is
	independent of the `--full-index` option above, which controls
	the diff-patch output format.  Non default number of
	digits can be specified with `--abbrev=<n>`.

-B::
	Break complete rewrite changes into pairs of delete and create.

-M::
ifndef::git-log[]
	Detect renames.
endif::git-log[]
ifdef::git-log[]
	If generating diffs, detect and report renames for each commit.
	For following files across renames while traversing history, see
	`--follow`.
endif::git-log[]

-C::
	Detect copies as well as renames.  See also `--find-copies-harder`.

ifndef::git-format-patch[]
--diff-filter=[ACDMRTUXB*]::
	Select only files that are Added (`A`), Copied (`C`),
	Deleted (`D`), Modified (`M`), Renamed (`R`), have their
	type (i.e. regular file, symlink, submodule, ...) changed (`T`),
	are Unmerged (`U`), are
	Unknown (`X`), or have had their pairing Broken (`B`).
	Any combination of the filter characters may 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.
endif::git-format-patch[]

--find-copies-harder::
	For performance reasons, by default, `-C` 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
	`-C` option has the same effect.

-l<num>::
	The `-M` and `-C` options require O(n^2) processing time where n
	is the number of potential rename/copy targets.  This
	option prevents rename/copy detection from running if
	the number of rename/copy targets exceeds the specified
	number.

ifndef::git-format-patch[]
-S<string>::
	Look for differences that introduce or remove an instance of
	<string>. Note that this is different than the string simply
	appearing in diff output; see the 'pickaxe' entry in
	linkgit:gitdiffcore[7] for more details.

--pickaxe-all::
	When `-S` finds a change, show all the changes in that
	changeset, not just the files that contain the change
	in <string>.

--pickaxe-regex::
	Make the <string> not a plain string but an extended POSIX
	regex to match.
endif::git-format-patch[]

-O<orderfile>::
	Output the patch in the order specified in the
	<orderfile>, which has one shell glob pattern per line.

ifndef::git-format-patch[]
-R::
	Swap two inputs; that is, show differences from index or
	on-disk file to tree contents.

--relative[=<path>]::
	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 <path> as an argument.
endif::git-format-patch[]

-a::
--text::
	Treat all files as text.

--ignore-space-at-eol::
	Ignore changes in whitespace at EOL.

-b::
--ignore-space-change::
	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.

-w::
--ignore-all-space::
	Ignore whitespace when comparing lines.  This ignores
	differences even if one line has whitespace where the other
	line has none.

--inter-hunk-context=<lines>::
	Show the context between diff hunks, up to the specified number
	of lines, thereby fusing hunks that are close to each other.

ifndef::git-format-patch[]
--exit-code::
	Make the program exit with codes similar to diff(1).
	That is, it exits with 1 if there were differences and
	0 means no differences.

--quiet::
	Disable all output of the program. Implies `--exit-code`.
endif::git-format-patch[]

--ext-diff::
	Allow an external diff helper to be executed. If you set an
	external diff driver with linkgit:gitattributes[5], you need
	to use this option with linkgit:git-log[1] and friends.

--no-ext-diff::
	Disallow external diff drivers.

--ignore-submodules::
	Ignore changes to submodules in the diff generation.

--src-prefix=<prefix>::
	Show the given source prefix instead of "a/".

--dst-prefix=<prefix>::
	Show the given destination prefix instead of "b/".

--no-prefix::
	Do not show any source or destination prefix.

For more detailed explanation on these common options, see also
linkgit:gitdiffcore[7].
