Documentation / git-apply.txton commit Avoid using non-portable `echo -n` in tests. (6ecfd91)
   1git-apply(1)
   2============
   3
   4NAME
   5----
   6git-apply - Apply a patch on a git index file and a working tree
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git apply' [--stat] [--numstat] [--summary] [--check] [--index]
  13          [--apply] [--no-add] [--build-fake-ancestor <file>] [-R | --reverse]
  14          [--allow-binary-replacement | --binary] [--reject] [-z]
  15          [-pNUM] [-CNUM] [--inaccurate-eof] [--recount] [--cached]
  16          [--whitespace=<nowarn|warn|fix|error|error-all>]
  17          [--exclude=PATH] [--include=PATH] [--directory=<root>]
  18          [--verbose] [<patch>...]
  19
  20DESCRIPTION
  21-----------
  22Reads supplied 'diff' output and applies it on a git index file
  23and a work tree.
  24
  25OPTIONS
  26-------
  27<patch>...::
  28        The files to read patch from.  '-' can be used to read
  29        from the standard input.
  30
  31--stat::
  32        Instead of applying the patch, output diffstat for the
  33        input.  Turns off "apply".
  34
  35--numstat::
  36        Similar to \--stat, but shows number of added and
  37        deleted lines in decimal notation and pathname without
  38        abbreviation, to make it more machine friendly.  For
  39        binary files, outputs two `-` instead of saying
  40        `0 0`.  Turns off "apply".
  41
  42--summary::
  43        Instead of applying the patch, output a condensed
  44        summary of information obtained from git diff extended
  45        headers, such as creations, renames and mode changes.
  46        Turns off "apply".
  47
  48--check::
  49        Instead of applying the patch, see if the patch is
  50        applicable to the current work tree and/or the index
  51        file and detects errors.  Turns off "apply".
  52
  53--index::
  54        When --check is in effect, or when applying the patch
  55        (which is the default when none of the options that
  56        disables it is in effect), make sure the patch is
  57        applicable to what the current index file records.  If
  58        the file to be patched in the work tree is not
  59        up-to-date, it is flagged as an error.  This flag also
  60        causes the index file to be updated.
  61
  62--cached::
  63        Apply a patch without touching the working tree. Instead, take the
  64        cached data, apply the patch, and store the result in the index,
  65        without using the working tree. This implies '--index'.
  66
  67--build-fake-ancestor <file>::
  68        Newer 'git-diff' output has embedded 'index information'
  69        for each blob to help identify the original version that
  70        the patch applies to.  When this flag is given, and if
  71        the original versions of the blobs is available locally,
  72        builds a temporary index containing those blobs.
  73+
  74When a pure mode change is encountered (which has no index information),
  75the information is read from the current index instead.
  76
  77-R::
  78--reverse::
  79        Apply the patch in reverse.
  80
  81--reject::
  82        For atomicity, 'git-apply' by default fails the whole patch and
  83        does not touch the working tree when some of the hunks
  84        do not apply.  This option makes it apply
  85        the parts of the patch that are applicable, and leave the
  86        rejected hunks in corresponding *.rej files.
  87
  88-z::
  89        When showing the index information, do not munge paths,
  90        but use NUL terminated machine readable format.  Without
  91        this flag, the pathnames output will have TAB, LF, and
  92        backslash characters replaced with `\t`, `\n`, and `\\`,
  93        respectively.
  94
  95-p<n>::
  96        Remove <n> leading slashes from traditional diff paths. The
  97        default is 1.
  98
  99-C<n>::
 100        Ensure at least <n> lines of surrounding context match before
 101        and after each change.  When fewer lines of surrounding
 102        context exist they all must match.  By default no context is
 103        ever ignored.
 104
 105--unidiff-zero::
 106        By default, 'git-apply' expects that the patch being
 107        applied is a unified diff with at least one line of context.
 108        This provides good safety measures, but breaks down when
 109        applying a diff generated with --unified=0. To bypass these
 110        checks use '--unidiff-zero'.
 111+
 112Note, for the reasons stated above usage of context-free patches are
 113discouraged.
 114
 115--apply::
 116        If you use any of the options marked "Turns off
 117        'apply'" above, 'git-apply' reads and outputs the
 118        information you asked without actually applying the
 119        patch.  Give this flag after those flags to also apply
 120        the patch.
 121
 122--no-add::
 123        When applying a patch, ignore additions made by the
 124        patch.  This can be used to extract the common part between
 125        two files by first running 'diff' on them and applying
 126        the result with this option, which would apply the
 127        deletion part but not addition part.
 128
 129--allow-binary-replacement::
 130--binary::
 131        Historically we did not allow binary patch applied
 132        without an explicit permission from the user, and this
 133        flag was the way to do so.  Currently we always allow binary
 134        patch application, so this is a no-op.
 135
 136--exclude=<path-pattern>::
 137        Don't apply changes to files matching the given path pattern. This can
 138        be useful when importing patchsets, where you want to exclude certain
 139        files or directories.
 140
 141--include=<path-pattern>::
 142        Apply changes to files matching the given path pattern. This can
 143        be useful when importing patchsets, where you want to include certain
 144        files or directories.
 145+
 146When --exclude and --include patterns are used, they are examined in the
 147order they appear on the command line, and the first match determines if a
 148patch to each path is used.  A patch to a path that does not match any
 149include/exclude pattern is used by default if there is no include pattern
 150on the command line, and ignored if there is any include pattern.
 151
 152--whitespace=<action>::
 153        When applying a patch, detect a new or modified line that has
 154        whitespace errors.  What are considered whitespace errors is
 155        controlled by `core.whitespace` configuration.  By default,
 156        trailing whitespaces (including lines that solely consist of
 157        whitespaces) and a space character that is immediately followed
 158        by a tab character inside the initial indent of the line are
 159        considered whitespace errors.
 160+
 161By default, the command outputs warning messages but applies the patch.
 162When `git-apply is used for statistics and not applying a
 163patch, it defaults to `nowarn`.
 164+
 165You can use different `<action>` to control this
 166behavior:
 167+
 168* `nowarn` turns off the trailing whitespace warning.
 169* `warn` outputs warnings for a few such errors, but applies the
 170  patch as-is (default).
 171* `fix` outputs warnings for a few such errors, and applies the
 172  patch after fixing them (`strip` is a synonym --- the tool
 173  used to consider only trailing whitespaces as errors, and the
 174  fix involved 'stripping' them, but modern gits do more).
 175* `error` outputs warnings for a few such errors, and refuses
 176  to apply the patch.
 177* `error-all` is similar to `error` but shows all errors.
 178
 179--inaccurate-eof::
 180        Under certain circumstances, some versions of 'diff' do not correctly
 181        detect a missing new-line at the end of the file. As a result, patches
 182        created by such 'diff' programs do not record incomplete lines
 183        correctly. This option adds support for applying such patches by
 184        working around this bug.
 185
 186-v::
 187--verbose::
 188        Report progress to stderr. By default, only a message about the
 189        current patch being applied will be printed. This option will cause
 190        additional information to be reported.
 191
 192--recount::
 193        Do not trust the line counts in the hunk headers, but infer them
 194        by inspecting the patch (e.g. after editing the patch without
 195        adjusting the hunk headers appropriately).
 196
 197--directory=<root>::
 198        Prepend <root> to all filenames.  If a "-p" argument was passed, too,
 199        it is applied before prepending the new root.
 200+
 201For example, a patch that talks about updating `a/git-gui.sh` to `b/git-gui.sh`
 202can be applied to the file in the working tree `modules/git-gui/git-gui.sh` by
 203running `git apply --directory=modules/git-gui`.
 204
 205Configuration
 206-------------
 207
 208apply.whitespace::
 209        When no `--whitespace` flag is given from the command
 210        line, this configuration item is used as the default.
 211
 212Submodules
 213----------
 214If the patch contains any changes to submodules then 'git-apply'
 215treats these changes as follows.
 216
 217If --index is specified (explicitly or implicitly), then the submodule
 218commits must match the index exactly for the patch to apply.  If any
 219of the submodules are checked-out, then these check-outs are completely
 220ignored, i.e., they are not required to be up-to-date or clean and they
 221are not updated.
 222
 223If --index is not specified, then the submodule commits in the patch
 224are ignored and only the absence of presence of the corresponding
 225subdirectory is checked and (if possible) updated.
 226
 227Author
 228------
 229Written by Linus Torvalds <torvalds@osdl.org>
 230
 231Documentation
 232--------------
 233Documentation by Junio C Hamano
 234
 235GIT
 236---
 237Part of the linkgit:git[1] suite