Merge branch 'js/notes'
[gitweb.git] / Documentation / git-apply.txt
index e928088e44f5ea364019a8c101049739ff9e78fa..9400f6a5d050c1e3d0a37fb147e00c9ad8ca799e 100644 (file)
@@ -3,16 +3,23 @@ git-apply(1)
 
 NAME
 ----
-git-apply - Apply patch on a git index file and a work tree
+git-apply - Apply a patch on a git index file and a working tree
 
 
 SYNOPSIS
 --------
-'git-apply' [--stat] [--summary] [--check] [--index] [--apply] [--show-files] [--index-info] [-z] [<patch>...]
+[verse]
+'git apply' [--stat] [--numstat] [--summary] [--check] [--index]
+         [--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse]
+         [--allow-binary-replacement | --binary] [--reject] [-z]
+         [-pNUM] [-CNUM] [--inaccurate-eof] [--recount] [--cached]
+         [--whitespace=<nowarn|warn|fix|error|error-all>]
+         [--exclude=PATH] [--include=PATH] [--directory=<root>]
+         [--verbose] [<patch>...]
 
 DESCRIPTION
 -----------
-Reads supplied diff output and applies it on a git index file
+Reads supplied 'diff' output and applies it on a git index file
 and a work tree.
 
 OPTIONS
@@ -25,6 +32,13 @@ OPTIONS
        Instead of applying the patch, output diffstat for the
        input.  Turns off "apply".
 
+--numstat::
+       Similar to \--stat, but shows number of added and
+       deleted lines in decimal notation and pathname without
+       abbreviation, to make it more machine friendly.  For
+       binary files, outputs two `-` instead of saying
+       `0 0`.  Turns off "apply".
+
 --summary::
        Instead of applying the patch, output a condensed
        summary of information obtained from git diff extended
@@ -45,15 +59,31 @@ OPTIONS
        up-to-date, it is flagged as an error.  This flag also
        causes the index file to be updated.
 
---show-files::
-       Show summary of files that are affected by the patch.
+--cached::
+       Apply a patch without touching the working tree. Instead, take the
+       cached data, apply the patch, and store the result in the index,
+       without using the working tree. This implies '--index'.
 
---index-info::
-       Newer git-diff output has embedded 'index information'
+--build-fake-ancestor=<file>::
+       Newer 'git-diff' output has embedded 'index information'
        for each blob to help identify the original version that
        the patch applies to.  When this flag is given, and if
-       the original version of the blob is available locally,
-       outputs information about them to the standard output.
+       the original versions of the blobs is available locally,
+       builds a temporary index containing those blobs.
++
+When a pure mode change is encountered (which has no index information),
+the information is read from the current index instead.
+
+-R::
+--reverse::
+       Apply the patch in reverse.
+
+--reject::
+       For atomicity, 'git-apply' by default fails the whole patch and
+       does not touch the working tree when some of the hunks
+       do not apply.  This option makes it apply
+       the parts of the patch that are applicable, and leave the
+       rejected hunks in corresponding *.rej files.
 
 -z::
        When showing the index information, do not munge paths,
@@ -62,13 +92,137 @@ OPTIONS
        backslash characters replaced with `\t`, `\n`, and `\\`,
        respectively.
 
+-p<n>::
+       Remove <n> leading slashes from traditional diff paths. The
+       default is 1.
+
+-C<n>::
+       Ensure at least <n> lines of surrounding context match before
+       and after each change.  When fewer lines of surrounding
+       context exist they all must match.  By default no context is
+       ever ignored.
+
+--unidiff-zero::
+       By default, 'git-apply' expects that the patch being
+       applied is a unified diff with at least one line of context.
+       This provides good safety measures, but breaks down when
+       applying a diff generated with --unified=0. To bypass these
+       checks use '--unidiff-zero'.
++
+Note, for the reasons stated above usage of context-free patches are
+discouraged.
+
 --apply::
-       If you use any of the options marked ``Turns off
-       "apply"'' above, git-apply reads and outputs the
+       If you use any of the options marked "Turns off
+       'apply'" above, 'git-apply' reads and outputs the
        information you asked without actually applying the
        patch.  Give this flag after those flags to also apply
        the patch.
 
+--no-add::
+       When applying a patch, ignore additions made by the
+       patch.  This can be used to extract the common part between
+       two files by first running 'diff' on them and applying
+       the result with this option, which would apply the
+       deletion part but not addition part.
+
+--allow-binary-replacement::
+--binary::
+       Historically we did not allow binary patch applied
+       without an explicit permission from the user, and this
+       flag was the way to do so.  Currently we always allow binary
+       patch application, so this is a no-op.
+
+--exclude=<path-pattern>::
+       Don't apply changes to files matching the given path pattern. This can
+       be useful when importing patchsets, where you want to exclude certain
+       files or directories.
+
+--include=<path-pattern>::
+       Apply changes to files matching the given path pattern. This can
+       be useful when importing patchsets, where you want to include certain
+       files or directories.
++
+When --exclude and --include patterns are used, they are examined in the
+order they appear on the command line, and the first match determines if a
+patch to each path is used.  A patch to a path that does not match any
+include/exclude pattern is used by default if there is no include pattern
+on the command line, and ignored if there is any include pattern.
+
+--whitespace=<action>::
+       When applying a patch, detect a new or modified line that has
+       whitespace errors.  What are considered whitespace errors is
+       controlled by `core.whitespace` configuration.  By default,
+       trailing whitespaces (including lines that solely consist of
+       whitespaces) and a space character that is immediately followed
+       by a tab character inside the initial indent of the line are
+       considered whitespace errors.
++
+By default, the command outputs warning messages but applies the patch.
+When `git-apply is used for statistics and not applying a
+patch, it defaults to `nowarn`.
++
+You can use different `<action>` to control this
+behavior:
++
+* `nowarn` turns off the trailing whitespace warning.
+* `warn` outputs warnings for a few such errors, but applies the
+  patch as-is (default).
+* `fix` outputs warnings for a few such errors, and applies the
+  patch after fixing them (`strip` is a synonym --- the tool
+  used to consider only trailing whitespaces as errors, and the
+  fix involved 'stripping' them, but modern gits do more).
+* `error` outputs warnings for a few such errors, and refuses
+  to apply the patch.
+* `error-all` is similar to `error` but shows all errors.
+
+--inaccurate-eof::
+       Under certain circumstances, some versions of 'diff' do not correctly
+       detect a missing new-line at the end of the file. As a result, patches
+       created by such 'diff' programs do not record incomplete lines
+       correctly. This option adds support for applying such patches by
+       working around this bug.
+
+-v::
+--verbose::
+       Report progress to stderr. By default, only a message about the
+       current patch being applied will be printed. This option will cause
+       additional information to be reported.
+
+--recount::
+       Do not trust the line counts in the hunk headers, but infer them
+       by inspecting the patch (e.g. after editing the patch without
+       adjusting the hunk headers appropriately).
+
+--directory=<root>::
+       Prepend <root> to all filenames.  If a "-p" argument was passed, too,
+       it is applied before prepending the new root.
++
+For example, a patch that talks about updating `a/git-gui.sh` to `b/git-gui.sh`
+can be applied to the file in the working tree `modules/git-gui/git-gui.sh` by
+running `git apply --directory=modules/git-gui`.
+
+Configuration
+-------------
+
+apply.whitespace::
+       When no `--whitespace` flag is given from the command
+       line, this configuration item is used as the default.
+
+Submodules
+----------
+If the patch contains any changes to submodules then 'git-apply'
+treats these changes as follows.
+
+If --index is specified (explicitly or implicitly), then the submodule
+commits must match the index exactly for the patch to apply.  If any
+of the submodules are checked-out, then these check-outs are completely
+ignored, i.e., they are not required to be up-to-date or clean and they
+are not updated.
+
+If --index is not specified, then the submodule commits in the patch
+are ignored and only the absence of presence of the corresponding
+subdirectory is checked and (if possible) updated.
 
 Author
 ------
@@ -80,5 +234,4 @@ Documentation by Junio C Hamano
 
 GIT
 ---
-Part of the gitlink:git[7] suite
-
+Part of the linkgit:git[1] suite