mirror of
https://github.com/git/git.git
synced 2024-11-27 03:53:55 +08:00
57f583c748
--ours, --theirs, and --union are already supported in `git merge-file` for automatically resolving conflicts in favor of one version or the other, instead of leaving conflict markers in the file. Support them in `git apply -3` as well because the two commands do the same kind of file-level merges. In case in the future --ours, --theirs, and --union gain a meaning outside of three-way-merges, they do not imply --3way but rather must be specified alongside it. Signed-off-by: Alex Henrie <alexhenrie24@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
299 lines
11 KiB
Plaintext
299 lines
11 KiB
Plaintext
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.
|
|
|
|
--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 unless
|
|
running in a Git repository and `--index` is not specified.
|
|
Note that `--index` could be implied by other options such
|
|
as `--cached` or `--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.txt[]
|
|
|
|
include::config/apply.txt[]
|
|
|
|
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
|