Autogenerated HTML docs for v2.42.0-398-ga9ecd
[git-htmldocs.git] / diff-options.txt
blob35fae7c87c8a6bf4d94edeba8381ec686654e38f
1 // Please don't remove this comment as asciidoc behaves badly when
2 // the first non-empty line is ifdef/ifndef. The symptom is that
3 // without this comment the <git-diff-core> attribute conditionally
4 // defined below ends up being defined unconditionally.
5 // Last checked with asciidoc 7.0.2.
7 ifndef::git-format-patch[]
8 ifndef::git-diff[]
9 ifndef::git-log[]
10 :git-diff-core: 1
11 endif::git-log[]
12 endif::git-diff[]
13 endif::git-format-patch[]
15 ifdef::git-format-patch[]
16 -p::
17 --no-stat::
18         Generate plain patches without any diffstats.
19 endif::git-format-patch[]
21 ifndef::git-format-patch[]
22 -p::
23 -u::
24 --patch::
25         Generate patch (see <<generate_patch_text_with_p>>).
26 ifdef::git-diff[]
27         This is the default.
28 endif::git-diff[]
30 -s::
31 --no-patch::
32         Suppress all output from the diff machinery.  Useful for
33         commands like `git show` that show the patch by default to
34         squelch their output, or to cancel the effect of options like
35         `--patch`, `--stat` earlier on the command line in an alias.
37 endif::git-format-patch[]
39 ifdef::git-log[]
40 --diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc|remerge|r)::
41 --no-diff-merges::
42         Specify diff format to be used for merge commits. Default is
43         {diff-merges-default} unless `--first-parent` is in use, in which case
44         `first-parent` is the default.
46 --diff-merges=(off|none):::
47 --no-diff-merges:::
48         Disable output of diffs for merge commits. Useful to override
49         implied value.
51 --diff-merges=on:::
52 --diff-merges=m:::
53 -m:::
54         This option makes diff output for merge commits to be shown in
55         the default format. `-m` will produce the output only if `-p`
56         is given as well. The default format could be changed using
57         `log.diffMerges` configuration parameter, which default value
58         is `separate`.
60 --diff-merges=first-parent:::
61 --diff-merges=1:::
62         This option makes merge commits show the full diff with
63         respect to the first parent only.
65 --diff-merges=separate:::
66         This makes merge commits show the full diff with respect to
67         each of the parents. Separate log entry and diff is generated
68         for each parent.
70 --diff-merges=remerge:::
71 --diff-merges=r:::
72 --remerge-diff:::
73         With this option, two-parent merge commits are remerged to
74         create a temporary tree object -- potentially containing files
75         with conflict markers and such.  A diff is then shown between
76         that temporary tree and the actual merge commit.
78 The output emitted when this option is used is subject to change, and
79 so is its interaction with other options (unless explicitly
80 documented).
82 --diff-merges=combined:::
83 --diff-merges=c:::
84 -c:::
85         With this option, diff output for a merge commit shows the
86         differences from each of the parents to the merge result
87         simultaneously instead of showing pairwise diff between a
88         parent and the result one at a time. Furthermore, it lists
89         only files which were modified from all parents. `-c` implies
90         `-p`.
92 --diff-merges=dense-combined:::
93 --diff-merges=cc:::
94 --cc:::
95         With this option the output produced by
96         `--diff-merges=combined` is further compressed by omitting
97         uninteresting hunks whose contents in the parents have only
98         two variants and the merge result picks one of them without
99         modification.  `--cc` implies `-p`.
101 --combined-all-paths::
102         This flag causes combined diffs (used for merge commits) to
103         list the name of the file from all parents.  It thus only has
104         effect when `--diff-merges=[dense-]combined` is in use, and
105         is likely only useful if filename changes are detected (i.e.
106         when either rename or copy detection have been requested).
107 endif::git-log[]
109 -U<n>::
110 --unified=<n>::
111         Generate diffs with <n> lines of context instead of
112         the usual three.
113 ifndef::git-format-patch[]
114         Implies `--patch`.
115 endif::git-format-patch[]
117 --output=<file>::
118         Output to a specific file instead of stdout.
120 --output-indicator-new=<char>::
121 --output-indicator-old=<char>::
122 --output-indicator-context=<char>::
123         Specify the character used to indicate new, old or context
124         lines in the generated patch. Normally they are '+', '-' and
125         ' ' respectively.
127 ifndef::git-format-patch[]
128 --raw::
129 ifndef::git-log[]
130         Generate the diff in raw format.
131 ifdef::git-diff-core[]
132         This is the default.
133 endif::git-diff-core[]
134 endif::git-log[]
135 ifdef::git-log[]
136         For each commit, show a summary of changes using the raw diff
137         format. See the "RAW OUTPUT FORMAT" section of
138         linkgit:git-diff[1]. This is different from showing the log
139         itself in raw format, which you can achieve with
140         `--format=raw`.
141 endif::git-log[]
142 endif::git-format-patch[]
144 ifndef::git-format-patch[]
145 --patch-with-raw::
146         Synonym for `-p --raw`.
147 endif::git-format-patch[]
149 ifdef::git-log[]
150 -t::
151         Show the tree objects in the diff output.
152 endif::git-log[]
154 --indent-heuristic::
155         Enable the heuristic that shifts diff hunk boundaries to make patches
156         easier to read. This is the default.
158 --no-indent-heuristic::
159         Disable the indent heuristic.
161 --minimal::
162         Spend extra time to make sure the smallest possible
163         diff is produced.
165 --patience::
166         Generate a diff using the "patience diff" algorithm.
168 --histogram::
169         Generate a diff using the "histogram diff" algorithm.
171 --anchored=<text>::
172         Generate a diff using the "anchored diff" algorithm.
174 This option may be specified more than once.
176 If a line exists in both the source and destination, exists only once,
177 and starts with this text, this algorithm attempts to prevent it from
178 appearing as a deletion or addition in the output. It uses the "patience
179 diff" algorithm internally.
181 --diff-algorithm={patience|minimal|histogram|myers}::
182         Choose a diff algorithm. The variants are as follows:
185 `default`, `myers`;;
186         The basic greedy diff algorithm. Currently, this is the default.
187 `minimal`;;
188         Spend extra time to make sure the smallest possible diff is
189         produced.
190 `patience`;;
191         Use "patience diff" algorithm when generating patches.
192 `histogram`;;
193         This algorithm extends the patience algorithm to "support
194         low-occurrence common elements".
197 For instance, if you configured the `diff.algorithm` variable to a
198 non-default value and want to use the default one, then you
199 have to use `--diff-algorithm=default` option.
201 --stat[=<width>[,<name-width>[,<count>]]]::
202         Generate a diffstat. By default, as much space as necessary
203         will be used for the filename part, and the rest for the graph
204         part. Maximum width defaults to terminal width, or 80 columns
205         if not connected to a terminal, and can be overridden by
206         `<width>`. The width of the filename part can be limited by
207         giving another width `<name-width>` after a comma or by setting
208         `diff.statNameWidth=<width>`. The width of the graph part can be
209         limited by using `--stat-graph-width=<width>` or by setting
210         `diff.statGraphWidth=<width>`. Using `--stat` or
211         `--stat-graph-width` affects all commands generating a stat graph,
212         while setting `diff.statNameWidth` or `diff.statGraphWidth`
213         does not affect `git format-patch`.
214         By giving a third parameter `<count>`, you can limit the output to
215         the first `<count>` lines, followed by `...` if there are more.
217 These parameters can also be set individually with `--stat-width=<width>`,
218 `--stat-name-width=<name-width>` and `--stat-count=<count>`.
220 --compact-summary::
221         Output a condensed summary of extended header information such
222         as file creations or deletions ("new" or "gone", optionally "+l"
223         if it's a symlink) and mode changes ("+x" or "-x" for adding
224         or removing executable bit respectively) in diffstat. The
225         information is put between the filename part and the graph
226         part. Implies `--stat`.
228 --numstat::
229         Similar to `--stat`, but shows number of added and
230         deleted lines in decimal notation and pathname without
231         abbreviation, to make it more machine friendly.  For
232         binary files, outputs two `-` instead of saying
233         `0 0`.
235 --shortstat::
236         Output only the last line of the `--stat` format containing total
237         number of modified files, as well as number of added and deleted
238         lines.
240 -X[<param1,param2,...>]::
241 --dirstat[=<param1,param2,...>]::
242         Output the distribution of relative amount of changes for each
243         sub-directory. The behavior of `--dirstat` can be customized by
244         passing it a comma separated list of parameters.
245         The defaults are controlled by the `diff.dirstat` configuration
246         variable (see linkgit:git-config[1]).
247         The following parameters are available:
250 `changes`;;
251         Compute the dirstat numbers by counting the lines that have been
252         removed from the source, or added to the destination. This ignores
253         the amount of pure code movements within a file.  In other words,
254         rearranging lines in a file is not counted as much as other changes.
255         This is the default behavior when no parameter is given.
256 `lines`;;
257         Compute the dirstat numbers by doing the regular line-based diff
258         analysis, and summing the removed/added line counts. (For binary
259         files, count 64-byte chunks instead, since binary files have no
260         natural concept of lines). This is a more expensive `--dirstat`
261         behavior than the `changes` behavior, but it does count rearranged
262         lines within a file as much as other changes. The resulting output
263         is consistent with what you get from the other `--*stat` options.
264 `files`;;
265         Compute the dirstat numbers by counting the number of files changed.
266         Each changed file counts equally in the dirstat analysis. This is
267         the computationally cheapest `--dirstat` behavior, since it does
268         not have to look at the file contents at all.
269 `cumulative`;;
270         Count changes in a child directory for the parent directory as well.
271         Note that when using `cumulative`, the sum of the percentages
272         reported may exceed 100%. The default (non-cumulative) behavior can
273         be specified with the `noncumulative` parameter.
274 <limit>;;
275         An integer parameter specifies a cut-off percent (3% by default).
276         Directories contributing less than this percentage of the changes
277         are not shown in the output.
280 Example: The following will count changed files, while ignoring
281 directories with less than 10% of the total amount of changed files,
282 and accumulating child directory counts in the parent directories:
283 `--dirstat=files,10,cumulative`.
285 --cumulative::
286         Synonym for --dirstat=cumulative
288 --dirstat-by-file[=<param1,param2>...]::
289         Synonym for --dirstat=files,param1,param2...
291 --summary::
292         Output a condensed summary of extended header information
293         such as creations, renames and mode changes.
295 ifndef::git-format-patch[]
296 --patch-with-stat::
297         Synonym for `-p --stat`.
298 endif::git-format-patch[]
300 ifndef::git-format-patch[]
302 -z::
303 ifdef::git-log[]
304         Separate the commits with NULs instead of with new newlines.
306 Also, when `--raw` or `--numstat` has been given, do not munge
307 pathnames and use NULs as output field terminators.
308 endif::git-log[]
309 ifndef::git-log[]
310         When `--raw`, `--numstat`, `--name-only` or `--name-status` has been
311         given, do not munge pathnames and use NULs as output field terminators.
312 endif::git-log[]
314 Without this option, pathnames with "unusual" characters are quoted as
315 explained for the configuration variable `core.quotePath` (see
316 linkgit:git-config[1]).
318 --name-only::
319         Show only names of changed files. The file names are often encoded in UTF-8.
320         For more information see the discussion about encoding in the linkgit:git-log[1]
321         manual page.
323 --name-status::
324         Show only names and status of changed files. See the description
325         of the `--diff-filter` option on what the status letters mean.
326         Just like `--name-only` the file names are often encoded in UTF-8.
328 --submodule[=<format>]::
329         Specify how differences in submodules are shown.  When specifying
330         `--submodule=short` the 'short' format is used.  This format just
331         shows the names of the commits at the beginning and end of the range.
332         When `--submodule` or `--submodule=log` is specified, the 'log'
333         format is used.  This format lists the commits in the range like
334         linkgit:git-submodule[1] `summary` does.  When `--submodule=diff`
335         is specified, the 'diff' format is used.  This format shows an
336         inline diff of the changes in the submodule contents between the
337         commit range.  Defaults to `diff.submodule` or the 'short' format
338         if the config option is unset.
340 --color[=<when>]::
341         Show colored diff.
342         `--color` (i.e. without '=<when>') is the same as `--color=always`.
343         '<when>' can be one of `always`, `never`, or `auto`.
344 ifdef::git-diff[]
345         It can be changed by the `color.ui` and `color.diff`
346         configuration settings.
347 endif::git-diff[]
349 --no-color::
350         Turn off colored diff.
351 ifdef::git-diff[]
352         This can be used to override configuration settings.
353 endif::git-diff[]
354         It is the same as `--color=never`.
356 --color-moved[=<mode>]::
357         Moved lines of code are colored differently.
358 ifdef::git-diff[]
359         It can be changed by the `diff.colorMoved` configuration setting.
360 endif::git-diff[]
361         The <mode> defaults to 'no' if the option is not given
362         and to 'zebra' if the option with no mode is given.
363         The mode must be one of:
366 no::
367         Moved lines are not highlighted.
368 default::
369         Is a synonym for `zebra`. This may change to a more sensible mode
370         in the future.
371 plain::
372         Any line that is added in one location and was removed
373         in another location will be colored with 'color.diff.newMoved'.
374         Similarly 'color.diff.oldMoved' will be used for removed lines
375         that are added somewhere else in the diff. This mode picks up any
376         moved line, but it is not very useful in a review to determine
377         if a block of code was moved without permutation.
378 blocks::
379         Blocks of moved text of at least 20 alphanumeric characters
380         are detected greedily. The detected blocks are
381         painted using either the 'color.diff.{old,new}Moved' color.
382         Adjacent blocks cannot be told apart.
383 zebra::
384         Blocks of moved text are detected as in 'blocks' mode. The blocks
385         are painted using either the 'color.diff.{old,new}Moved' color or
386         'color.diff.{old,new}MovedAlternative'. The change between
387         the two colors indicates that a new block was detected.
388 dimmed-zebra::
389         Similar to 'zebra', but additional dimming of uninteresting parts
390         of moved code is performed. The bordering lines of two adjacent
391         blocks are considered interesting, the rest is uninteresting.
392         `dimmed_zebra` is a deprecated synonym.
395 --no-color-moved::
396         Turn off move detection. This can be used to override configuration
397         settings. It is the same as `--color-moved=no`.
399 --color-moved-ws=<modes>::
400         This configures how whitespace is ignored when performing the
401         move detection for `--color-moved`.
402 ifdef::git-diff[]
403         It can be set by the `diff.colorMovedWS` configuration setting.
404 endif::git-diff[]
405         These modes can be given as a comma separated list:
408 no::
409         Do not ignore whitespace when performing move detection.
410 ignore-space-at-eol::
411         Ignore changes in whitespace at EOL.
412 ignore-space-change::
413         Ignore changes in amount of whitespace.  This ignores whitespace
414         at line end, and considers all other sequences of one or
415         more whitespace characters to be equivalent.
416 ignore-all-space::
417         Ignore whitespace when comparing lines. This ignores differences
418         even if one line has whitespace where the other line has none.
419 allow-indentation-change::
420         Initially ignore any whitespace in the move detection, then
421         group the moved code blocks only into a block if the change in
422         whitespace is the same per line. This is incompatible with the
423         other modes.
426 --no-color-moved-ws::
427         Do not ignore whitespace when performing move detection. This can be
428         used to override configuration settings. It is the same as
429         `--color-moved-ws=no`.
431 --word-diff[=<mode>]::
432         Show a word diff, using the <mode> to delimit changed words.
433         By default, words are delimited by whitespace; see
434         `--word-diff-regex` below.  The <mode> defaults to 'plain', and
435         must be one of:
438 color::
439         Highlight changed words using only colors.  Implies `--color`.
440 plain::
441         Show words as `[-removed-]` and `{+added+}`.  Makes no
442         attempts to escape the delimiters if they appear in the input,
443         so the output may be ambiguous.
444 porcelain::
445         Use a special line-based format intended for script
446         consumption.  Added/removed/unchanged runs are printed in the
447         usual unified diff format, starting with a `+`/`-`/` `
448         character at the beginning of the line and extending to the
449         end of the line.  Newlines in the input are represented by a
450         tilde `~` on a line of its own.
451 none::
452         Disable word diff again.
455 Note that despite the name of the first mode, color is used to
456 highlight the changed parts in all modes if enabled.
458 --word-diff-regex=<regex>::
459         Use <regex> to decide what a word is, instead of considering
460         runs of non-whitespace to be a word.  Also implies
461         `--word-diff` unless it was already enabled.
463 Every non-overlapping match of the
464 <regex> is considered a word.  Anything between these matches is
465 considered whitespace and ignored(!) for the purposes of finding
466 differences.  You may want to append `|[^[:space:]]` to your regular
467 expression to make sure that it matches all non-whitespace characters.
468 A match that contains a newline is silently truncated(!) at the
469 newline.
471 For example, `--word-diff-regex=.` will treat each character as a word
472 and, correspondingly, show differences character by character.
474 The regex can also be set via a diff driver or configuration option, see
475 linkgit:gitattributes[5] or linkgit:git-config[1].  Giving it explicitly
476 overrides any diff driver or configuration setting.  Diff drivers
477 override configuration settings.
479 --color-words[=<regex>]::
480         Equivalent to `--word-diff=color` plus (if a regex was
481         specified) `--word-diff-regex=<regex>`.
482 endif::git-format-patch[]
484 --no-renames::
485         Turn off rename detection, even when the configuration
486         file gives the default to do so.
488 --[no-]rename-empty::
489         Whether to use empty blobs as rename source.
491 ifndef::git-format-patch[]
492 --check::
493         Warn if changes introduce conflict markers or whitespace errors.
494         What are considered whitespace errors is controlled by `core.whitespace`
495         configuration.  By default, trailing whitespaces (including
496         lines that consist solely of whitespaces) and a space character
497         that is immediately followed by a tab character inside the
498         initial indent of the line are considered whitespace errors.
499         Exits with non-zero status if problems are found. Not compatible
500         with --exit-code.
502 --ws-error-highlight=<kind>::
503         Highlight whitespace errors in the `context`, `old` or `new`
504         lines of the diff.  Multiple values are separated by comma,
505         `none` resets previous values, `default` reset the list to
506         `new` and `all` is a shorthand for `old,new,context`.  When
507         this option is not given, and the configuration variable
508         `diff.wsErrorHighlight` is not set, only whitespace errors in
509         `new` lines are highlighted. The whitespace errors are colored
510         with `color.diff.whitespace`.
512 endif::git-format-patch[]
514 --full-index::
515         Instead of the first handful of characters, show the full
516         pre- and post-image blob object names on the "index"
517         line when generating patch format output.
519 --binary::
520         In addition to `--full-index`, output a binary diff that
521         can be applied with `git-apply`.
522 ifndef::git-format-patch[]
523         Implies `--patch`.
524 endif::git-format-patch[]
526 --abbrev[=<n>]::
527         Instead of showing the full 40-byte hexadecimal object
528         name in diff-raw format output and diff-tree header
529         lines, show the shortest prefix that is at least '<n>'
530         hexdigits long that uniquely refers the object.
531         In diff-patch output format, `--full-index` takes higher
532         precedence, i.e. if `--full-index` is specified, full blob
533         names will be shown regardless of `--abbrev`.
534         Non default number of digits can be specified with `--abbrev=<n>`.
536 -B[<n>][/<m>]::
537 --break-rewrites[=[<n>][/<m>]]::
538         Break complete rewrite changes into pairs of delete and
539         create. This serves two purposes:
541 It affects the way a change that amounts to a total rewrite of a file
542 not as a series of deletion and insertion mixed together with a very
543 few lines that happen to match textually as the context, but as a
544 single deletion of everything old followed by a single insertion of
545 everything new, and the number `m` controls this aspect of the -B
546 option (defaults to 60%). `-B/70%` specifies that less than 30% of the
547 original should remain in the result for Git to consider it a total
548 rewrite (i.e. otherwise the resulting patch will be a series of
549 deletion and insertion mixed together with context lines).
551 When used with -M, a totally-rewritten file is also considered as the
552 source of a rename (usually -M only considers a file that disappeared
553 as the source of a rename), and the number `n` controls this aspect of
554 the -B option (defaults to 50%). `-B20%` specifies that a change with
555 addition and deletion compared to 20% or more of the file's size are
556 eligible for being picked up as a possible source of a rename to
557 another file.
559 -M[<n>]::
560 --find-renames[=<n>]::
561 ifndef::git-log[]
562         Detect renames.
563 endif::git-log[]
564 ifdef::git-log[]
565         If generating diffs, detect and report renames for each commit.
566         For following files across renames while traversing history, see
567         `--follow`.
568 endif::git-log[]
569         If `n` is specified, it is a threshold on the similarity
570         index (i.e. amount of addition/deletions compared to the
571         file's size). For example, `-M90%` means Git should consider a
572         delete/add pair to be a rename if more than 90% of the file
573         hasn't changed.  Without a `%` sign, the number is to be read as
574         a fraction, with a decimal point before it.  I.e., `-M5` becomes
575         0.5, and is thus the same as `-M50%`.  Similarly, `-M05` is
576         the same as `-M5%`.  To limit detection to exact renames, use
577         `-M100%`.  The default similarity index is 50%.
579 -C[<n>]::
580 --find-copies[=<n>]::
581         Detect copies as well as renames.  See also `--find-copies-harder`.
582         If `n` is specified, it has the same meaning as for `-M<n>`.
584 --find-copies-harder::
585         For performance reasons, by default, `-C` option finds copies only
586         if the original file of the copy was modified in the same
587         changeset.  This flag makes the command
588         inspect unmodified files as candidates for the source of
589         copy.  This is a very expensive operation for large
590         projects, so use it with caution.  Giving more than one
591         `-C` option has the same effect.
593 -D::
594 --irreversible-delete::
595         Omit the preimage for deletes, i.e. print only the header but not
596         the diff between the preimage and `/dev/null`. The resulting patch
597         is not meant to be applied with `patch` or `git apply`; this is
598         solely for people who want to just concentrate on reviewing the
599         text after the change. In addition, the output obviously lacks
600         enough information to apply such a patch in reverse, even manually,
601         hence the name of the option.
603 When used together with `-B`, omit also the preimage in the deletion part
604 of a delete/create pair.
606 -l<num>::
607         The `-M` and `-C` options involve some preliminary steps that
608         can detect subsets of renames/copies cheaply, followed by an
609         exhaustive fallback portion that compares all remaining
610         unpaired destinations to all relevant sources.  (For renames,
611         only remaining unpaired sources are relevant; for copies, all
612         original sources are relevant.)  For N sources and
613         destinations, this exhaustive check is O(N^2).  This option
614         prevents the exhaustive portion of rename/copy detection from
615         running if the number of source/destination files involved
616         exceeds the specified number.  Defaults to diff.renameLimit.
617         Note that a value of 0 is treated as unlimited.
619 ifndef::git-format-patch[]
620 --diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]::
621         Select only files that are Added (`A`), Copied (`C`),
622         Deleted (`D`), Modified (`M`), Renamed (`R`), have their
623         type (i.e. regular file, symlink, submodule, ...) changed (`T`),
624         are Unmerged (`U`), are
625         Unknown (`X`), or have had their pairing Broken (`B`).
626         Any combination of the filter characters (including none) can be used.
627         When `*` (All-or-none) is added to the combination, all
628         paths are selected if there is any file that matches
629         other criteria in the comparison; if there is no file
630         that matches other criteria, nothing is selected.
632 Also, these upper-case letters can be downcased to exclude.  E.g.
633 `--diff-filter=ad` excludes added and deleted paths.
635 Note that not all diffs can feature all types. For instance, copied and
636 renamed entries cannot appear if detection for those types is disabled.
638 -S<string>::
639         Look for differences that change the number of occurrences of
640         the specified string (i.e. addition/deletion) in a file.
641         Intended for the scripter's use.
643 It is useful when you're looking for an exact block of code (like a
644 struct), and want to know the history of that block since it first
645 came into being: use the feature iteratively to feed the interesting
646 block in the preimage back into `-S`, and keep going until you get the
647 very first version of the block.
649 Binary files are searched as well.
651 -G<regex>::
652         Look for differences whose patch text contains added/removed
653         lines that match <regex>.
655 To illustrate the difference between `-S<regex> --pickaxe-regex` and
656 `-G<regex>`, consider a commit with the following diff in the same
657 file:
659 ----
660 +    return frotz(nitfol, two->ptr, 1, 0);
662 -    hit = frotz(nitfol, mf2.ptr, 1, 0);
663 ----
665 While `git log -G"frotz\(nitfol"` will show this commit, `git log
666 -S"frotz\(nitfol" --pickaxe-regex` will not (because the number of
667 occurrences of that string did not change).
669 Unless `--text` is supplied patches of binary files without a textconv
670 filter will be ignored.
672 See the 'pickaxe' entry in linkgit:gitdiffcore[7] for more
673 information.
675 --find-object=<object-id>::
676         Look for differences that change the number of occurrences of
677         the specified object. Similar to `-S`, just the argument is different
678         in that it doesn't search for a specific string but for a specific
679         object id.
681 The object can be a blob or a submodule commit. It implies the `-t` option in
682 `git-log` to also find trees.
684 --pickaxe-all::
685         When `-S` or `-G` finds a change, show all the changes in that
686         changeset, not just the files that contain the change
687         in <string>.
689 --pickaxe-regex::
690         Treat the <string> given to `-S` as an extended POSIX regular
691         expression to match.
693 endif::git-format-patch[]
695 -O<orderfile>::
696         Control the order in which files appear in the output.
697         This overrides the `diff.orderFile` configuration variable
698         (see linkgit:git-config[1]).  To cancel `diff.orderFile`,
699         use `-O/dev/null`.
701 The output order is determined by the order of glob patterns in
702 <orderfile>.
703 All files with pathnames that match the first pattern are output
704 first, all files with pathnames that match the second pattern (but not
705 the first) are output next, and so on.
706 All files with pathnames that do not match any pattern are output
707 last, as if there was an implicit match-all pattern at the end of the
708 file.
709 If multiple pathnames have the same rank (they match the same pattern
710 but no earlier patterns), their output order relative to each other is
711 the normal order.
713 <orderfile> is parsed as follows:
716  - Blank lines are ignored, so they can be used as separators for
717    readability.
719  - Lines starting with a hash ("`#`") are ignored, so they can be used
720    for comments.  Add a backslash ("`\`") to the beginning of the
721    pattern if it starts with a hash.
723  - Each other line contains a single pattern.
726 Patterns have the same syntax and semantics as patterns used for
727 fnmatch(3) without the FNM_PATHNAME flag, except a pathname also
728 matches a pattern if removing any number of the final pathname
729 components matches the pattern.  For example, the pattern "`foo*bar`"
730 matches "`fooasdfbar`" and "`foo/bar/baz/asdf`" but not "`foobarx`".
732 --skip-to=<file>::
733 --rotate-to=<file>::
734         Discard the files before the named <file> from the output
735         (i.e. 'skip to'), or move them to the end of the output
736         (i.e. 'rotate to').  These were invented primarily for use
737         of the `git difftool` command, and may not be very useful
738         otherwise.
740 ifndef::git-format-patch[]
741 -R::
742         Swap two inputs; that is, show differences from index or
743         on-disk file to tree contents.
744 endif::git-format-patch[]
746 --relative[=<path>]::
747 --no-relative::
748         When run from a subdirectory of the project, it can be
749         told to exclude changes outside the directory and show
750         pathnames relative to it with this option.  When you are
751         not in a subdirectory (e.g. in a bare repository), you
752         can name which subdirectory to make the output relative
753         to by giving a <path> as an argument.
754         `--no-relative` can be used to countermand both `diff.relative` config
755         option and previous `--relative`.
757 -a::
758 --text::
759         Treat all files as text.
761 --ignore-cr-at-eol::
762         Ignore carriage-return at the end of line when doing a comparison.
764 --ignore-space-at-eol::
765         Ignore changes in whitespace at EOL.
767 -b::
768 --ignore-space-change::
769         Ignore changes in amount of whitespace.  This ignores whitespace
770         at line end, and considers all other sequences of one or
771         more whitespace characters to be equivalent.
773 -w::
774 --ignore-all-space::
775         Ignore whitespace when comparing lines.  This ignores
776         differences even if one line has whitespace where the other
777         line has none.
779 --ignore-blank-lines::
780         Ignore changes whose lines are all blank.
782 -I<regex>::
783 --ignore-matching-lines=<regex>::
784         Ignore changes whose all lines match <regex>.  This option may
785         be specified more than once.
787 --inter-hunk-context=<lines>::
788         Show the context between diff hunks, up to the specified number
789         of lines, thereby fusing hunks that are close to each other.
790         Defaults to `diff.interHunkContext` or 0 if the config option
791         is unset.
793 -W::
794 --function-context::
795         Show whole function as context lines for each change.
796         The function names are determined in the same way as
797         `git diff` works out patch hunk headers (see 'Defining a
798         custom hunk-header' in linkgit:gitattributes[5]).
800 ifndef::git-format-patch[]
801 ifndef::git-log[]
802 --exit-code::
803         Make the program exit with codes similar to diff(1).
804         That is, it exits with 1 if there were differences and
805         0 means no differences.
807 --quiet::
808         Disable all output of the program. Implies `--exit-code`.
809 endif::git-log[]
810 endif::git-format-patch[]
812 --ext-diff::
813         Allow an external diff helper to be executed. If you set an
814         external diff driver with linkgit:gitattributes[5], you need
815         to use this option with linkgit:git-log[1] and friends.
817 --no-ext-diff::
818         Disallow external diff drivers.
820 --textconv::
821 --no-textconv::
822         Allow (or disallow) external text conversion filters to be run
823         when comparing binary files. See linkgit:gitattributes[5] for
824         details. Because textconv filters are typically a one-way
825         conversion, the resulting diff is suitable for human
826         consumption, but cannot be applied. For this reason, textconv
827         filters are enabled by default only for linkgit:git-diff[1] and
828         linkgit:git-log[1], but not for linkgit:git-format-patch[1] or
829         diff plumbing commands.
831 --ignore-submodules[=<when>]::
832         Ignore changes to submodules in the diff generation. <when> can be
833         either "none", "untracked", "dirty" or "all", which is the default.
834         Using "none" will consider the submodule modified when it either contains
835         untracked or modified files or its HEAD differs from the commit recorded
836         in the superproject and can be used to override any settings of the
837         'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When
838         "untracked" is used submodules are not considered dirty when they only
839         contain untracked content (but they are still scanned for modified
840         content). Using "dirty" ignores all changes to the work tree of submodules,
841         only changes to the commits stored in the superproject are shown (this was
842         the behavior until 1.7.0). Using "all" hides all changes to submodules.
844 --src-prefix=<prefix>::
845         Show the given source prefix instead of "a/".
847 --dst-prefix=<prefix>::
848         Show the given destination prefix instead of "b/".
850 --no-prefix::
851         Do not show any source or destination prefix.
853 --default-prefix::
854         Use the default source and destination prefixes ("a/" and "b/").
855         This is usually the default already, but may be used to override
856         config such as `diff.noprefix`.
858 --line-prefix=<prefix>::
859         Prepend an additional prefix to every line of output.
861 --ita-invisible-in-index::
862         By default entries added by "git add -N" appear as an existing
863         empty file in "git diff" and a new file in "git diff --cached".
864         This option makes the entry appear as a new file in "git diff"
865         and non-existent in "git diff --cached". This option could be
866         reverted with `--ita-visible-in-index`. Both options are
867         experimental and could be removed in future.
869 For more detailed explanation on these common options, see also
870 linkgit:gitdiffcore[7].