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