NAME

git-apply - Apply a patch to files and/or to the index

SYNOPSIS

  1. git apply [--stat] [--numstat] [--summary] [--check] [--index | --intent-to-add] [--3way]
  2. [--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse]
  3. [--allow-binary-replacement | --binary] [--reject] [-z]
  4. [-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached]
  5. [--ignore-space-change | --ignore-whitespace]
  6. [--whitespace=(nowarn|warn|fix|error|error-all)]
  7. [--exclude=<path>] [--include=<path>] [--directory=<root>]
  8. [--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 pathsoutside the directory are ignored.With the —index option the patch is also applied to the index, andwith 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. Usegit-am[1] to create commits from patches generated bygit-format-patch[1] and/or received by email.

OPTIONS

  • …​
  • The files to read the patch from. - can be used to readfrom the standard input.

  • —stat

  • Instead of applying the patch, output diffstat for theinput. Turns off "apply".

  • —numstat

  • Similar to —stat, but shows the number of added anddeleted lines in decimal notation and the pathname withoutabbreviation, to make it more machine friendly. Forbinary files, outputs two - instead of saying0 0. Turns off "apply".

  • —summary

  • Instead of applying the patch, output a condensedsummary of information obtained from git diff extendedheaders, such as creations, renames and mode changes.Turns off "apply".

  • —check

  • Instead of applying the patch, see if the patch isapplicable to the current working tree and/or the indexfile 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 thatdisables it is in effect), make sure the patch isapplicable to what the current index file records. Ifthe file to be patched in the working tree is notup to date, it is flagged as an error. This flag alsocauses the index file to be updated.

  • —cached

  • Apply a patch without touching the working tree. Instead take thecached data, apply the patch, and store the result in the indexwithout using the working tree. This implies —index.

  • —intent-to-add

  • When applying the patch only to the working tree, mark newfiles to be added to the index later (see —intent-to-addoption in git-add[1]). This option is ignored unlessrunning in a Git repository and —index is not specified.Note that —index could be implied by other options suchas —cached or —3way.

  • -3

  • —3way
  • When the patch does not apply cleanly, fall back on 3-way merge ifthe patch records the identity of blobs it is supposed to apply to,and we have those blobs available locally, possibly leaving theconflict markers in the files in the working tree for the user toresolve. This option implies the —index option, and is incompatiblewith the —reject and the —cached options.

  • —build-fake-ancestor=

  • Newer git diff output has embedded _index information_for each blob to help identify the original version thatthe patch applies to. When this flag is given, and ifthe 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 anddoes not touch the working tree when some of the hunksdo not apply. This option makes it applythe parts of the patch that are applicable, and leave therejected 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 asexplained for the configuration variable core.quotePath (seegit-config[1]).

  • -p
  • Remove leading path components (separated by slashes) fromtraditional diff paths. E.g., with -p2, a patch againsta/dir/file will be applied directly to file. The default is1.

  • -C

  • Ensure at least lines of surrounding context match beforeand after each change. When fewer lines of surroundingcontext exist they all must match. By default no context isever ignored.

  • —unidiff-zero

  • By default, git apply expects that the patch beingapplied is a unified diff with at least one line of context.This provides good safety measures, but breaks down whenapplying a diff generated with —unified=0. To bypass thesechecks use —unidiff-zero.

Note, for the reasons stated above usage of context-free patches isdiscouraged.

  • —apply
  • If you use any of the options marked "Turns offapply" above, git apply reads and outputs therequested information without actually applying thepatch. Give this flag after those flags to also applythe patch.

  • —no-add

  • When applying a patch, ignore additions made by thepatch. This can be used to extract the common part betweentwo files by first running diff on them and applyingthe result with this option, which would apply thedeletion part but not the addition part.

  • —allow-binary-replacement

  • —binary
  • Historically we did not allow binary patch appliedwithout an explicit permission from the user, and thisflag was the way to do so. Currently we always allow binarypatch application, so this is a no-op.

  • —exclude=

  • Don’t apply changes to files matching the given path pattern. This canbe useful when importing patchsets, where you want to exclude certainfiles or directories.

  • —include=

  • Apply changes to files matching the given path pattern. This canbe useful when importing patchsets, where you want to include certainfiles or directories.

When —exclude and —include patterns are used, they are examined in theorder they appear on the command line, and the first match determines if apatch to each path is used. A patch to a path that does not match anyinclude/exclude pattern is used by default if there is no include patternon 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 contextlines if necessary.Context lines will preserve their whitespace, and they will notundergo whitespace fixing regardless of the value of the—whitespace option. New lines will still be fixed, though.

  • —whitespace=

  • When applying a patch, detect a new or modified line that haswhitespace errors. What are considered whitespace errors iscontrolled by core.whitespace configuration. By default,trailing whitespaces (including lines that solely consist ofwhitespaces) and a space character that is immediately followedby a tab character inside the initial indent of the line areconsidered whitespace errors.

By default, the command outputs warning messages but applies the patch.When git-apply is used for statistics and not applying apatch, it defaults to nowarn.

You can use different <action> values to control thisbehavior:

  • nowarn turns off the trailing whitespace warning.

  • warn outputs warnings for a few such errors, but applies thepatch as-is (default).

  • fix outputs warnings for a few such errors, and applies thepatch after fixing them (strip is a synonym —- the toolused to consider only trailing whitespace characters as errors, and thefix involved stripping them, but modern Gits do more).

  • error outputs warnings for a few such errors, and refusesto apply the patch.

  • error-all is similar to error but shows all errors.

  • —inaccurate-eof
  • Under certain circumstances, some versions of diff do not correctlydetect a missing new-line at the end of the file. As a result, patchescreated by such diff programs do not record incomplete linescorrectly. This option adds support for applying such patches byworking around this bug.

  • -v

  • —verbose
  • Report progress to stderr. By default, only a message about thecurrent patch being applied will be printed. This option will causeadditional information to be reported.

  • —recount

  • Do not trust the line counts in the hunk headers, but infer themby inspecting the patch (e.g. after editing the patch withoutadjusting the hunk headers appropriately).

  • —directory=

  • Prepend 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.shcan be applied to the file in the working tree modules/git-gui/git-gui.sh byrunning 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 workingdirectory when "git apply" is used as a replacement of GNUpatch) is rejected as a mistake (or a mischief).

When git apply is used as a "better GNU patch", the user can passthe —unsafe-paths option to override this safety check. This optionhas 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 inwhitespace to be significant.

  • apply.whitespace

  • When no —whitespace flag is given from the commandline, 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 submodulecommits must match the index exactly for the patch to apply. If anyof the submodules are checked-out, then these check-outs are completelyignored, i.e., they are not required to be up to date or clean and theyare not updated.

If —index is not specified, then the submodule commits in the patchare ignored and only the absence or presence of the correspondingsubdirectory is checked and (if possible) updated.

SEE ALSO

git-am[1].

GIT

Part of the git[1] suite