Code

diff --stat: add config option to limit graph width
[git.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.
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 section on generating patches).
26         {git-diff? This is the default.}
27 endif::git-format-patch[]
29 -U<n>::
30 --unified=<n>::
31         Generate diffs with <n> lines of context instead of
32         the usual three.
33 ifndef::git-format-patch[]
34         Implies `-p`.
35 endif::git-format-patch[]
37 ifndef::git-format-patch[]
38 --raw::
39         Generate the raw format.
40         {git-diff-core? This is the default.}
41 endif::git-format-patch[]
43 ifndef::git-format-patch[]
44 --patch-with-raw::
45         Synonym for `-p --raw`.
46 endif::git-format-patch[]
48 --minimal::
49         Spend extra time to make sure the smallest possible
50         diff is produced.
52 --patience::
53         Generate a diff using the "patience diff" algorithm.
55 --stat[=<width>[,<name-width>[,<count>]]]::
56         Generate a diffstat. By default, as much space as necessary
57         will be used for the filename part, and the rest for the graph
58         part. Maximum width defaults to terminal width, or 80 columns
59         if not connected to a terminal, and can be overriden by
60         `<width>`. The width of the filename part can be limited by
61         giving another width `<name-width>` after a comma. The width
62         of the graph part can be limited by using
63         `--stat-graph-width=<width>` (affects all commands generating
64         a stat graph) or by setting `diff.statGraphWidth=<width>`
65         (does not affect `git format-patch`).
66         By giving a third parameter `<count>`, you can limit the
67         output to the first `<count>` lines, followed by `...` if
68         there are more.
69 +
70 These parameters can also be set individually with `--stat-width=<width>`,
71 `--stat-name-width=<name-width>` and `--stat-count=<count>`.
73 --numstat::
74         Similar to `\--stat`, but shows number of added and
75         deleted lines in decimal notation and pathname without
76         abbreviation, to make it more machine friendly.  For
77         binary files, outputs two `-` instead of saying
78         `0 0`.
80 --shortstat::
81         Output only the last line of the `--stat` format containing total
82         number of modified files, as well as number of added and deleted
83         lines.
85 --dirstat[=<param1,param2,...>]::
86         Output the distribution of relative amount of changes for each
87         sub-directory. The behavior of `--dirstat` can be customized by
88         passing it a comma separated list of parameters.
89         The defaults are controlled by the `diff.dirstat` configuration
90         variable (see linkgit:git-config[1]).
91         The following parameters are available:
92 +
93 --
94 `changes`;;
95         Compute the dirstat numbers by counting the lines that have been
96         removed from the source, or added to the destination. This ignores
97         the amount of pure code movements within a file.  In other words,
98         rearranging lines in a file is not counted as much as other changes.
99         This is the default behavior when no parameter is given.
100 `lines`;;
101         Compute the dirstat numbers by doing the regular line-based diff
102         analysis, and summing the removed/added line counts. (For binary
103         files, count 64-byte chunks instead, since binary files have no
104         natural concept of lines). This is a more expensive `--dirstat`
105         behavior than the `changes` behavior, but it does count rearranged
106         lines within a file as much as other changes. The resulting output
107         is consistent with what you get from the other `--*stat` options.
108 `files`;;
109         Compute the dirstat numbers by counting the number of files changed.
110         Each changed file counts equally in the dirstat analysis. This is
111         the computationally cheapest `--dirstat` behavior, since it does
112         not have to look at the file contents at all.
113 `cumulative`;;
114         Count changes in a child directory for the parent directory as well.
115         Note that when using `cumulative`, the sum of the percentages
116         reported may exceed 100%. The default (non-cumulative) behavior can
117         be specified with the `noncumulative` parameter.
118 <limit>;;
119         An integer parameter specifies a cut-off percent (3% by default).
120         Directories contributing less than this percentage of the changes
121         are not shown in the output.
122 --
124 Example: The following will count changed files, while ignoring
125 directories with less than 10% of the total amount of changed files,
126 and accumulating child directory counts in the parent directories:
127 `--dirstat=files,10,cumulative`.
129 --summary::
130         Output a condensed summary of extended header information
131         such as creations, renames and mode changes.
133 ifndef::git-format-patch[]
134 --patch-with-stat::
135         Synonym for `-p --stat`.
136 endif::git-format-patch[]
138 ifndef::git-format-patch[]
140 -z::
141 ifdef::git-log[]
142         Separate the commits with NULs instead of with new newlines.
144 Also, when `--raw` or `--numstat` has been given, do not munge
145 pathnames and use NULs as output field terminators.
146 endif::git-log[]
147 ifndef::git-log[]
148         When `--raw`, `--numstat`, `--name-only` or `--name-status` has been
149         given, do not munge pathnames and use NULs as output field terminators.
150 endif::git-log[]
152 Without this option, each pathname output will have TAB, LF, double quotes,
153 and backslash characters replaced with `\t`, `\n`, `\"`, and `\\`,
154 respectively, and the pathname will be enclosed in double quotes if
155 any of those replacements occurred.
157 --name-only::
158         Show only names of changed files.
160 --name-status::
161         Show only names and status of changed files. See the description
162         of the `--diff-filter` option on what the status letters mean.
164 --submodule[=<format>]::
165         Chose the output format for submodule differences. <format> can be one of
166         'short' and 'log'. 'short' just shows pairs of commit names, this format
167         is used when this option is not given. 'log' is the default value for this
168         option and lists the commits in that commit range like the 'summary'
169         option of linkgit:git-submodule[1] does.
171 --color[=<when>]::
172         Show colored diff.
173         The value must be `always` (the default for `<when>`), `never`, or `auto`.
174         The default value is `never`.
175 ifdef::git-diff[]
176         It can be changed by the `color.ui` and `color.diff`
177         configuration settings.
178 endif::git-diff[]
180 --no-color::
181         Turn off colored diff.
182 ifdef::git-diff[]
183         This can be used to override configuration settings.
184 endif::git-diff[]
185         It is the same as `--color=never`.
187 --word-diff[=<mode>]::
188         Show a word diff, using the <mode> to delimit changed words.
189         By default, words are delimited by whitespace; see
190         `--word-diff-regex` below.  The <mode> defaults to 'plain', and
191         must be one of:
193 --
194 color::
195         Highlight changed words using only colors.  Implies `--color`.
196 plain::
197         Show words as `[-removed-]` and `{+added+}`.  Makes no
198         attempts to escape the delimiters if they appear in the input,
199         so the output may be ambiguous.
200 porcelain::
201         Use a special line-based format intended for script
202         consumption.  Added/removed/unchanged runs are printed in the
203         usual unified diff format, starting with a `+`/`-`/` `
204         character at the beginning of the line and extending to the
205         end of the line.  Newlines in the input are represented by a
206         tilde `~` on a line of its own.
207 none::
208         Disable word diff again.
209 --
211 Note that despite the name of the first mode, color is used to
212 highlight the changed parts in all modes if enabled.
214 --word-diff-regex=<regex>::
215         Use <regex> to decide what a word is, instead of considering
216         runs of non-whitespace to be a word.  Also implies
217         `--word-diff` unless it was already enabled.
219 Every non-overlapping match of the
220 <regex> is considered a word.  Anything between these matches is
221 considered whitespace and ignored(!) for the purposes of finding
222 differences.  You may want to append `|[^[:space:]]` to your regular
223 expression to make sure that it matches all non-whitespace characters.
224 A match that contains a newline is silently truncated(!) at the
225 newline.
227 The regex can also be set via a diff driver or configuration option, see
228 linkgit:gitattributes[1] or linkgit:git-config[1].  Giving it explicitly
229 overrides any diff driver or configuration setting.  Diff drivers
230 override configuration settings.
232 --color-words[=<regex>]::
233         Equivalent to `--word-diff=color` plus (if a regex was
234         specified) `--word-diff-regex=<regex>`.
235 endif::git-format-patch[]
237 --no-renames::
238         Turn off rename detection, even when the configuration
239         file gives the default to do so.
241 ifndef::git-format-patch[]
242 --check::
243         Warn if changes introduce whitespace errors.  What are
244         considered whitespace errors is controlled by `core.whitespace`
245         configuration.  By default, trailing whitespaces (including
246         lines that solely consist of whitespaces) and a space character
247         that is immediately followed by a tab character inside the
248         initial indent of the line are considered whitespace errors.
249         Exits with non-zero status if problems are found. Not compatible
250         with --exit-code.
251 endif::git-format-patch[]
253 --full-index::
254         Instead of the first handful of characters, show the full
255         pre- and post-image blob object names on the "index"
256         line when generating patch format output.
258 --binary::
259         In addition to `--full-index`, output a binary diff that
260         can be applied with `git-apply`.
262 --abbrev[=<n>]::
263         Instead of showing the full 40-byte hexadecimal object
264         name in diff-raw format output and diff-tree header
265         lines, show only a partial prefix.  This is
266         independent of the `--full-index` option above, which controls
267         the diff-patch output format.  Non default number of
268         digits can be specified with `--abbrev=<n>`.
270 -B[<n>][/<m>]::
271 --break-rewrites[=[<n>][/<m>]]::
272         Break complete rewrite changes into pairs of delete and
273         create. This serves two purposes:
275 It affects the way a change that amounts to a total rewrite of a file
276 not as a series of deletion and insertion mixed together with a very
277 few lines that happen to match textually as the context, but as a
278 single deletion of everything old followed by a single insertion of
279 everything new, and the number `m` controls this aspect of the -B
280 option (defaults to 60%). `-B/70%` specifies that less than 30% of the
281 original should remain in the result for git to consider it a total
282 rewrite (i.e. otherwise the resulting patch will be a series of
283 deletion and insertion mixed together with context lines).
285 When used with -M, a totally-rewritten file is also considered as the
286 source of a rename (usually -M only considers a file that disappeared
287 as the source of a rename), and the number `n` controls this aspect of
288 the -B option (defaults to 50%). `-B20%` specifies that a change with
289 addition and deletion compared to 20% or more of the file's size are
290 eligible for being picked up as a possible source of a rename to
291 another file.
293 -M[<n>]::
294 --find-renames[=<n>]::
295 ifndef::git-log[]
296         Detect renames.
297 endif::git-log[]
298 ifdef::git-log[]
299         If generating diffs, detect and report renames for each commit.
300         For following files across renames while traversing history, see
301         `--follow`.
302 endif::git-log[]
303         If `n` is specified, it is a threshold on the similarity
304         index (i.e. amount of addition/deletions compared to the
305         file's size). For example, `-M90%` means git should consider a
306         delete/add pair to be a rename if more than 90% of the file
307         hasn't changed.
309 -C[<n>]::
310 --find-copies[=<n>]::
311         Detect copies as well as renames.  See also `--find-copies-harder`.
312         If `n` is specified, it has the same meaning as for `-M<n>`.
314 --find-copies-harder::
315         For performance reasons, by default, `-C` option finds copies only
316         if the original file of the copy was modified in the same
317         changeset.  This flag makes the command
318         inspect unmodified files as candidates for the source of
319         copy.  This is a very expensive operation for large
320         projects, so use it with caution.  Giving more than one
321         `-C` option has the same effect.
323 -D::
324 --irreversible-delete::
325         Omit the preimage for deletes, i.e. print only the header but not
326         the diff between the preimage and `/dev/null`. The resulting patch
327         is not meant to be applied with `patch` nor `git apply`; this is
328         solely for people who want to just concentrate on reviewing the
329         text after the change. In addition, the output obviously lack
330         enough information to apply such a patch in reverse, even manually,
331         hence the name of the option.
333 When used together with `-B`, omit also the preimage in the deletion part
334 of a delete/create pair.
336 -l<num>::
337         The `-M` and `-C` options require O(n^2) processing time where n
338         is the number of potential rename/copy targets.  This
339         option prevents rename/copy detection from running if
340         the number of rename/copy targets exceeds the specified
341         number.
343 ifndef::git-format-patch[]
344 --diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]::
345         Select only files that are Added (`A`), Copied (`C`),
346         Deleted (`D`), Modified (`M`), Renamed (`R`), have their
347         type (i.e. regular file, symlink, submodule, ...) changed (`T`),
348         are Unmerged (`U`), are
349         Unknown (`X`), or have had their pairing Broken (`B`).
350         Any combination of the filter characters (including none) can be used.
351         When `*` (All-or-none) is added to the combination, all
352         paths are selected if there is any file that matches
353         other criteria in the comparison; if there is no file
354         that matches other criteria, nothing is selected.
356 -S<string>::
357         Look for differences that introduce or remove an instance of
358         <string>. Note that this is different than the string simply
359         appearing in diff output; see the 'pickaxe' entry in
360         linkgit:gitdiffcore[7] for more details.
362 -G<regex>::
363         Look for differences whose added or removed line matches
364         the given <regex>.
366 --pickaxe-all::
367         When `-S` or `-G` finds a change, show all the changes in that
368         changeset, not just the files that contain the change
369         in <string>.
371 --pickaxe-regex::
372         Make the <string> not a plain string but an extended POSIX
373         regex to match.
374 endif::git-format-patch[]
376 -O<orderfile>::
377         Output the patch in the order specified in the
378         <orderfile>, which has one shell glob pattern per line.
380 ifndef::git-format-patch[]
381 -R::
382         Swap two inputs; that is, show differences from index or
383         on-disk file to tree contents.
385 --relative[=<path>]::
386         When run from a subdirectory of the project, it can be
387         told to exclude changes outside the directory and show
388         pathnames relative to it with this option.  When you are
389         not in a subdirectory (e.g. in a bare repository), you
390         can name which subdirectory to make the output relative
391         to by giving a <path> as an argument.
392 endif::git-format-patch[]
394 -a::
395 --text::
396         Treat all files as text.
398 --ignore-space-at-eol::
399         Ignore changes in whitespace at EOL.
401 -b::
402 --ignore-space-change::
403         Ignore changes in amount of whitespace.  This ignores whitespace
404         at line end, and considers all other sequences of one or
405         more whitespace characters to be equivalent.
407 -w::
408 --ignore-all-space::
409         Ignore whitespace when comparing lines.  This ignores
410         differences even if one line has whitespace where the other
411         line has none.
413 --inter-hunk-context=<lines>::
414         Show the context between diff hunks, up to the specified number
415         of lines, thereby fusing hunks that are close to each other.
417 -W::
418 --function-context::
419         Show whole surrounding functions of changes.
421 ifndef::git-format-patch[]
422 ifndef::git-log[]
423 --exit-code::
424         Make the program exit with codes similar to diff(1).
425         That is, it exits with 1 if there were differences and
426         0 means no differences.
428 --quiet::
429         Disable all output of the program. Implies `--exit-code`.
430 endif::git-log[]
431 endif::git-format-patch[]
433 --ext-diff::
434         Allow an external diff helper to be executed. If you set an
435         external diff driver with linkgit:gitattributes[5], you need
436         to use this option with linkgit:git-log[1] and friends.
438 --no-ext-diff::
439         Disallow external diff drivers.
441 --textconv::
442 --no-textconv::
443         Allow (or disallow) external text conversion filters to be run
444         when comparing binary files. See linkgit:gitattributes[5] for
445         details. Because textconv filters are typically a one-way
446         conversion, the resulting diff is suitable for human
447         consumption, but cannot be applied. For this reason, textconv
448         filters are enabled by default only for linkgit:git-diff[1] and
449         linkgit:git-log[1], but not for linkgit:git-format-patch[1] or
450         diff plumbing commands.
452 --ignore-submodules[=<when>]::
453         Ignore changes to submodules in the diff generation. <when> can be
454         either "none", "untracked", "dirty" or "all", which is the default
455         Using "none" will consider the submodule modified when it either contains
456         untracked or modified files or its HEAD differs from the commit recorded
457         in the superproject and can be used to override any settings of the
458         'ignore' option in linkgit:git-config[1] or linkgit:gitmodules[5]. When
459         "untracked" is used submodules are not considered dirty when they only
460         contain untracked content (but they are still scanned for modified
461         content). Using "dirty" ignores all changes to the work tree of submodules,
462         only changes to the commits stored in the superproject are shown (this was
463         the behavior until 1.7.0). Using "all" hides all changes to submodules.
465 --src-prefix=<prefix>::
466         Show the given source prefix instead of "a/".
468 --dst-prefix=<prefix>::
469         Show the given destination prefix instead of "b/".
471 --no-prefix::
472         Do not show any source or destination prefix.
474 For more detailed explanation on these common options, see also
475 linkgit:gitdiffcore[7].