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