Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.47.1 no changes
- 2.47.0 10/06/24
- 2.43.1 → 2.46.2 no changes
- 2.43.0 11/20/23
- 2.40.1 → 2.42.3 no changes
- 2.40.0 03/12/23
- 2.38.1 → 2.39.5 no changes
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 no changes
- 2.35.0 01/24/22
- 2.32.1 → 2.34.8 no changes
- 2.32.0 06/06/21
- 2.29.1 → 2.31.8 no changes
- 2.29.0 10/19/20
- 2.19.1 → 2.28.1 no changes
- 2.19.0 09/10/18
- 2.18.1 → 2.18.5 no changes
- 2.18.0 06/21/18
- 2.16.6 → 2.17.6 no changes
- 2.15.4 12/06/19
- 2.14.6 no changes
- 2.13.7 05/22/18
- 2.9.5 → 2.12.5 no changes
- 2.8.6 07/30/17
- 2.5.6 → 2.7.6 no changes
- 2.4.12 05/05/17
- 2.3.10 09/28/15
- 2.1.4 → 2.2.3 no changes
- 2.0.5 12/17/14
概述
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>…]
描述
读取提供的差异输出(即 “一个补丁” )并将其应用于文件。 当从版本库中的子目录运行时,目录外的补丁路径会被忽略。 使用 --index
选项,补丁也会应用到索引中,使用 --cached
选项,补丁只应用到索引中。 如果没有这些选项,该命令只对文件打补丁,而不要求它们在 Git 仓库中。
该命令会应用补丁,但不会创建提交。 使用 git-am[1] 从 git-format-patch[1] 生成的和/或通过电子邮件收到的补丁创建提交。
选项
- <补丁>…
-
要读取补丁的文件。 - 可以用来从标准输入中读取。
- --stat
-
不应用补丁,而是输出输入的差异状态。 关掉 "apply"。
- --numstat
-
类似于
--stat
,但是用十进制符号显示增加和删除的行数,路径名不加缩写,使其对机器更友好。 对于二进制文件,输出两个`-` 而不是0 0
。 关闭 "apply"。 - --summary
-
不应用补丁,而是输出从 git dif f扩展头文件中获得的信息的浓缩摘要,如创建、重命名和模式变化。 关闭 "apply"。
- --check
-
看看该补丁是否适用于当前工作树和/或索引文件,并检测到错误,而不是应用该补丁。 关闭 "apply"。
- --index
-
在索引和工作目录上都打上补丁(如果
--check`生 效,则只需检查它是否能干净地应用于两者)。注意,
--index` 希望相关路径的索引条目和工作区副本是相同的(它们的内容和元数据,如文件模式必须匹配),如果它们不相同,将引发一个错误,即使该补丁可以干净地应用于索引和工作区。 - --cached
-
将补丁只应用于索引,而不触及工作目录。如果
--check
是有效的,只需检查它是否能干净地应用于索引条目。 - --intent-to-add
-
当只在工作树上应用补丁时,标记新的文件,以便以后添加到索引中(见 git-add[1] 中的
--intent-to-add
选项)。除非在 Git 仓库中运行且没有指定--index
,否则该选项将被忽略。 请注意,--index
可能是由其他选项暗示的,如--cached
或--3way
。 - -3
- --3way
-
如果补丁记录了它应该应用到的二进制文件的身份,并且我们有这些二进制文件在本地可用,则尝试三方合并,可能会在工作树中的文件中留下冲突标记,由用户解决。 这个选项意味着
--index
选项,除非使用--cached
选项,并且与--reject
选项不兼容。 当与--cached
选项一起使用时,任何冲突都被留在缓存的较高阶段。 - --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=<文件>
-
较新的 "git diff" 输出为每个 blob 嵌入了 "索引信息",以帮助识别补丁所适用的原始版本。 当给出这个标志时,如果 blob 的原始版本在本地可用,则建立一个包含这些 blob 的临时索引。
当遇到一个纯粹的模式变化(没有索引信息)时,将从当前索引中读取信息。
- -R
- --reverse
-
反过来应用补丁。
- --reject
-
为了保证原子性,git apply 默认情况下会使整个补丁失效,并且在某些目标不适用的情况下不会接触工作区。 这个选项让它应用补丁中适用的部分,并将被拒绝的目标留在相应的 *.rej 文件中。
- -z
-
当
--numstat
被给出时,不对路径名进行编码,而是使用以 NUL 结尾的机器可读格式。如果没有这个选项,带 “不常见” 字符的路径名会被引用,正如配置变量
core.quotePath
所解释的那样(参见 git-config[1])。 - -p<n>
-
移除传统差异路径中的 <n> 前导路径成分(用斜线分隔)。例如,使用
-p2
,针对a/dir/file
的补丁将直接应用于file
。默认为 1。 - -C<n>
-
确保每次更改前后至少有 <n> 行的周围环境相匹配。 当周围环境的行数较少时,它们必须全部匹配。 在默认情况下,没有任何上下文被忽略。
- --unidiff-zero
-
默认情况下,git apply 希望被应用的补丁是一个至少有一行上下文的统一差异。 这提供了很好的安全措施,但在应用以
--unified=0
生成的差异时,会出现问题。要绕过这些检查,请使用--unidiff-zero
。请注意,由于上述原因,我们不鼓励使用无上下文修补程序。
- --apply
-
如果您使用了上面标有 "关闭 apply " 的任何选项,git apply 会读取并输出所需的信息,而不会实际应用补丁。 在这些标志之后给出这个标志,也可以应用该补丁。
- --no-add
-
当应用一个补丁时,忽略该补丁所做的添加内容。 这可以用来提取两个文件之间的共同部分,首先对它们运行 diff,然后用这个选项应用结果,这将应用删除的部分,但不应用增加的部分。
- --allow-binary-replacement
- --binary
-
过去,我们不允许在没有用户明确许可的情况下使用二进制补丁程序,这个标志就是这样做的。 目前,我们始终允许二进制补丁的应用,所以这个标记是无效的。
- --exclude=<路径模式>
-
不要对符合给定路径模式的文件进行修改。这在导入补丁集时,你想把某些文件或目录排除在外的情况下很有用。
- --include=<路径模式>
-
将修改应用于与给定路径模式相匹配的文件。这在导入补丁集时,你想包括某些文件或目录的情况下很有用。
当使用
--exclude
和--include
模式时,会按照它们在命令行中出现的顺序进行检查,第一个匹配项决定是否使用每个路径的补丁。 如果命令行上没有include模式,则默认使用不匹配任何 include/exclude 模式的路径的补丁,如果有任何 include 模式,则忽略。 - --ignore-space-change
- --ignore-whitespace
-
当应用一个补丁时,如果有必要,请忽略上下文行中的空白变化。 上下文行将保留其空白,无论
--whitespace
选项的值是多少,它们都不会进行空白修正。不过,新的行仍然会被修复。 - --whitespace=<行为>
-
当应用一个补丁时,检测一个新的或修改过的行有空格错误。 什么是空格错误是由
core.whitespace
配置控制的。 默认情况下,尾部的空白(包括仅由空白组成的行)和紧跟在行的初始缩进内的 Tab 字符的空白字符被认为是空白错误。默认情况下,该命令输出警告信息,但会应用补丁。 当
git-apply
被用于统计而不应用补丁时,它默认为nowarn
。你可以使用不同的
<行为>
值来控制这种行为:-
nowarn
关闭尾部空白警告。 -
warn
对少数此类错误输出警告,但按原样应用补丁(默认)。 -
fix
对一些这样的错误输出警告,并在修复后应用补丁(strip
是一个同义词—该工具过去只考虑尾部空白字符的错误,修复涉及 stripping 等,但现代 Gits 做得更多)。 -
error
对几个这样的错误输出警告,并拒绝应用补丁。 -
error-all
与error
类似,但显示所有错误。
-
- --inaccurate-eof
-
在某些情况下,某些版本的 diff ' 不能正确检测到文件末尾缺少的换行。因此,由这类 'diff 程序创建的补丁不能正确记录不完整的行。这个选项通过解决这个错误来增加对应用这种补丁的支持。
- -v
- --verbose
-
向标准错误流报告进度。默认情况下,只有关于当前正在应用的补丁的信息会被打印出来。这个选项将导致报告额外的信息。
- -q
- --quiet
-
抑制标准错误流输出。关于补丁状态和进度的信息将不被打印。
- --recount
-
不信任组头中的行数,而是通过检查补丁来推断(例如,在编辑补丁后没有适当调整组头)。
- --directory=<root>
-
将 <根目录> 预置到所有文件名中。 如果还传递了 "-p " 参数,则在预置新根目录之前应用。
例如,一个关于将
a/git-gui.sh
更新为b/git-gui.sh
的补丁可以通过运行git apply --directory=modules/git-gui
来应用于工作区modules/git-gui/git-gui.sh
中的文件。 - --unsafe-paths
-
默认情况下,影响到工作区域之外(无论是 Git 控制的工作区,还是用 "git apply" 替代 GNU patch 时的当前工作目录)的补丁会被当作错误(或恶作剧)而拒绝。
当
git apply
被用作 "更好的 GNU 补丁" 时,用户可以通过--unsafe-paths
选项来覆盖这个安全检查。 当使用--index
或--cached
时,该选项没有作用。 - --allow-empty
-
对于不包含差异的补丁,不返回错误信息。这包括空补丁和只有提交文本的补丁。
配置
Warning
|
Missing See original version for this content. |
Warning
|
Missing See original version for this content. |
子模块
如果该补丁包含对子模块的任何修改,那么 git apply 会对这些修改进行如下处理。
如果 --index
被指定(显式或隐式),那么子模块的提交必须与索引完全匹配,补丁才能应用。 如果任何一个子模块被检出,那么这些检出的模块将被完全忽略,也就是说,它们不需要是最新的或干净的,它们也不会被更新。
如果没有指定 --index
,那么补丁中的子模块提交将被忽略,只检查相应的子目录是否存在,并(如果可能)更新。
GIT
属于 git[1] 文档