| git-apply(1) |
| ============ |
| |
| NAME |
| ---- |
| git-apply - Apply a patch to files and/or to the index |
| |
| |
| SYNOPSIS |
| -------- |
| [verse] |
| 'git apply' [--stat] [--numstat] [--summary] [--check] [--index] [--3way] |
| [--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse] |
| [--allow-binary-replacement | --binary] [--reject] [-z] |
| [-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached] |
| [--ignore-space-change | --ignore-whitespace] |
| [--whitespace=(nowarn|warn|fix|error|error-all)] |
| [--exclude=<path>] [--include=<path>] [--directory=<root>] |
| [--verbose] [--unsafe-paths] [<patch>...] |
| |
| DESCRIPTION |
| ----------- |
| Reads the supplied diff output (i.e. "a patch") and applies it to files. |
| When running from a subdirectory in a repository, patched paths |
| outside the directory are ignored. |
| With the `--index` option the patch is also applied to the index, and |
| with the `--cached` option the patch is only applied to the index. |
| Without these options, the command applies the patch only to files, |
| and does not require them to be in a Git repository. |
| |
| This command applies the patch but does not create a commit. Use |
| linkgit:git-am[1] to create commits from patches generated by |
| linkgit:git-format-patch[1] and/or received by email. |
| |
| OPTIONS |
| ------- |
| <patch>...:: |
| The files to read the patch from. '-' can be used to read |
| from the standard input. |
| |
| --stat:: |
| Instead of applying the patch, output diffstat for the |
| input. Turns off "apply". |
| |
| --numstat:: |
| Similar to `--stat`, but shows the number of added and |
| deleted lines in decimal notation and the 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 |
| headers, such as creations, renames and mode changes. |
| Turns off "apply". |
| |
| --check:: |
| Instead of applying the patch, see if the patch is |
| applicable to the current working tree and/or the index |
| file and detects errors. Turns off "apply". |
| |
| --index:: |
| When `--check` is in effect, or when applying the patch |
| (which is the default when none of the options that |
| disables it is in effect), make sure the patch is |
| applicable to what the current index file records. If |
| the file to be patched in the working tree is not |
| up-to-date, it is flagged as an error. This flag also |
| causes the index file to be updated. |
| |
| --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`. |
| |
| -3:: |
| --3way:: |
| When the patch does not apply cleanly, fall back on 3-way merge if |
| the patch records the identity of blobs it is supposed to apply to, |
| and we have those blobs available locally, possibly leaving the |
| conflict markers in the files in the working tree for the user to |
| resolve. This option implies the `--index` option, and is incompatible |
| with the `--reject` and the `--cached` options. |
| |
| --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 versions of the blobs are 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 `--numstat` has been given, do not munge pathnames, |
| but use a NUL-terminated machine-readable format. |
| + |
| Without this option, pathnames with "unusual" characters are quoted as |
| explained for the configuration variable `core.quotePath` (see |
| linkgit:git-config[1]). |
| |
| -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 is |
| discouraged. |
| |
| --apply:: |
| If you use any of the options marked "Turns off |
| 'apply'" above, 'git apply' reads and outputs the |
| requested information 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 the 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. |
| |
| --ignore-space-change:: |
| --ignore-whitespace:: |
| When applying a patch, ignore changes in whitespace in context |
| lines if necessary. |
| Context lines will preserve their whitespace, and they will not |
| undergo whitespace fixing regardless of the value of the |
| `--whitespace` option. New lines will still be fixed, though. |
| |
| --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>` values 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 whitespace characters 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 also passed, |
| 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`. |
| |
| --unsafe-paths:: |
| By default, a patch that affects outside the working area |
| (either a Git controlled working tree, or the current working |
| directory when "git apply" is used as a replacement of GNU |
| patch) is rejected as a mistake (or a mischief). |
| + |
| When `git apply` is used as a "better GNU patch", the user can pass |
| the `--unsafe-paths` option to override this safety check. This option |
| has no effect when `--index` or `--cached` is in use. |
| |
| Configuration |
| ------------- |
| |
| apply.ignoreWhitespace:: |
| Set to 'change' if you want changes in whitespace to be ignored by default. |
| Set to one of: no, none, never, false if you want changes in |
| whitespace to be significant. |
| 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 or presence of the corresponding |
| subdirectory is checked and (if possible) updated. |
| |
| SEE ALSO |
| -------- |
| linkgit:git-am[1]. |
| |
| GIT |
| --- |
| Part of the linkgit:git[1] suite |