| 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 | --intent-to-add] [--3way] [--ours | --theirs | --union] | |
| [--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 | --quiet] [--unsafe-paths] [--allow-empty] [<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:: | |
| Apply the patch to both the index and the working tree (or | |
| merely check that it would apply cleanly to both if `--check` is | |
| in effect). Note that `--index` expects index entries and | |
| working tree copies for relevant paths to be identical (their | |
| contents and metadata such as file mode must match), and will | |
| raise an error if they are not, even if the patch would apply | |
| cleanly to both the index and the working tree in isolation. | |
| --cached:: | |
| Apply the patch to just the index, without touching the working | |
| tree. If `--check` is in effect, merely check that it would | |
| apply cleanly to the index entry. | |
| -N:: | |
| --intent-to-add:: | |
| When applying the patch only to the working tree, mark new | |
| files to be added to the index later (see `--intent-to-add` | |
| option in linkgit:git-add[1]). This option is ignored if | |
| `--index` or `--cached` are used, and has no effect outside a Git | |
| repository. Note that `--index` could be implied by other options | |
| such as `--3way`. | |
| -3:: | |
| --3way:: | |
| Attempt 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 unless the | |
| `--cached` option is used, and is incompatible with the `--reject` option. | |
| When used with the `--cached` option, any conflicts are left at higher stages | |
| in the cache. | |
| --ours:: | |
| --theirs:: | |
| --union:: | |
| Instead of leaving conflicts in the file, resolve conflicts favouring | |
| our (or their or both) side of the lines. Requires --3way. | |
| --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 path components (separated by slashes) from | |
| traditional diff paths. E.g., with `-p2`, a patch against | |
| `a/dir/file` will be applied directly to `file`. 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, the 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 application | |
| 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. | |
| -q:: | |
| --quiet:: | |
| Suppress stderr output. Messages about patch status and progress | |
| will not be printed. | |
| --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. | |
| --allow-empty:: | |
| Don't return an error for patches containing no diff. This includes | |
| empty patches and patches with commit text only. | |
| CONFIGURATION | |
| ------------- | |
| include::includes/cmd-config-section-all.adoc[] | |
| include::config/apply.adoc[] | |
| 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 |