NAME
git-apply - Apply a patch to files and/or to the index
SYNOPSIS
- git apply [--stat] [--numstat] [--summary] [--check] [--index | --intent-to-add] [--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 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.
Instead of applying the patch, output diffstat for theinput. Turns off "apply".
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".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".
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".
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.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
.When applying the patch only to the working tree, mark newfiles to be added to the index later (see
—intent-to-add
option 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
.- —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.- 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.
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.
- 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 tofile
. The default is1.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. - 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.
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.
- —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.
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.
- 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.- 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 toerror
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.
- —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.
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).
- 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.sh
can 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.
- 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
Part of the git[1] suite