ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# git-apply > 原文: [https://git-scm.com/docs/git-apply](https://git-scm.com/docs/git-apply) ## 名称 git-apply - 将补丁应用于文件和/或索引 ## 概要 ``` 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>…​] ``` ## 描述 读取提供的diff输出(即“补丁”)并将其应用于文件。从存储库中的子目录运行时,将忽略目录外的修补路径。使用`--index`选项,补丁也会应用于索引,而使用`--cached`选项,补丁仅应用于索引。如果没有这些选项,该命令仅将补丁应用于文件,并且不要求它们位于Git存储库中。 此命令应用修补程序但不创建提交。使用 [git-am [1]](https://git-scm.com/docs/git-am) 从 [git-format-patch [1]](https://git-scm.com/docs/git-format-patch) 生成的补丁创建提交和/或通过电子邮件接收。 ## OPTIONS ``` <patch>…​ ``` 从中读取补丁的文件。 _-_ 可用于从标准输入读取。 ``` --stat ``` 而不是应用补丁,输入diffstat作为输入。关闭“申请”。 ``` --numstat ``` 与`--stat`类似,但以十进制表示法显示添加和删除的行数,不使用缩写表示路径名,以使其更加机器友好。对于二进制文件,输出两个`-`而不是`0 0`。关闭“申请”。 ``` --summary ``` 而不是应用补丁,输出从git diff扩展头获取的信息的精简摘要,例如创建,重命名和模式更改。关闭“申请”。 ``` --check ``` 而不是应用修补程序,查看修补程序是否适用于当前工作树和/或索引文件并检测错误。关闭“申请”。 ``` --index ``` 当`--check`生效时,或者应用补丁时(默认情况下,如果没有禁用它的选项生效),请确保补丁适用于当前索引文件记录的内容。如果要在工作树中修补的文件不是最新的,则会将其标记为错误。此标志还会导致更新索引文件。 ``` --cached ``` 在不触及工作树的情况下应用补丁。而是使用缓存数据,应用补丁,并将结果存储在索引中,而不使用工作树。这意味着`--index`。 ``` --intent-to-add ``` 仅将补丁应用于工作树时,请稍后将新文件标记为添加到索引中(请参阅 [git-add [1]](https://git-scm.com/docs/git-add) 中的`--intent-to-add`选项)。除非在Git存储库中运行并且未指定`--index`,否则将忽略此选项。请注意,`--index`可能隐含在`--cached`或`--3way`等其他选项中。 ``` -3 ``` ``` --3way ``` 当补丁不能干净地应用时,如果补丁记录了应该应用的blob的身份,则回退到三向合并,并且我们在本地可以使用这些blob,可能会将冲突标记留在工作树中的文件中供用户解决。此选项隐含`--index`选项,与`--reject`和`--cached`选项不兼容。 ``` --build-fake-ancestor=<file> ``` 较新的 _git diff_ 输出为每个blob嵌入了_索引信息_,以帮助识别该补丁适用的原始版本。给出此标志,并且如果Blob的原始版本在本地可用,则构建包含这些blob的临时索引。 遇到纯模式更改(没有索引信息)时,将从当前索引读取信息。 ``` -R ``` ``` --reverse ``` 反向应用补丁。 ``` --reject ``` 对于原子性,默认情况下 _git apply_ 会使整个补丁失败,并且当某些黑客不适用时不会触及工作树。此选项使其应用适用的修补程序部分,并将拒绝的数据保留在相应的* .rej文件中。 ``` -z ``` 当给出`--numstat`时,不要使用路径名,而是使用NUL终止的机器可读格式。 如果没有此选项,则会引用具有“异常”字符的路径名,如配置变量`core.quotePath`所述(参见 [git-config [1]](https://git-scm.com/docs/git-config) )。 ``` -p<n> ``` 删除&lt; n&gt;传统差异路径的前导路径组件(由斜线分隔)。例如,使用`-p2`,针对`a/dir/file`的补丁将直接应用于`file`。默认值为1。 ``` -C<n> ``` 确保至少&lt; n&gt;周围环境的线在每次更改之前和之后匹配。当存在较少的周围环境线时,它们都必须匹配。默认情况下,不会忽略任何上下文。 ``` --unidiff-zero ``` 默认情况下, _git apply_ 期望应用的补丁是具有至少一行上下文的统一差异。这提供了良好的安全措施,但在应用`--unified=0`生成的差异时会出现故障。要绕过这些检查,请使用`--unidiff-zero`。 请注意,由于上述原因,不鼓励使用无上下文补丁。 ``` --apply ``` 如果您使用上面标记为“关闭_应用_”的任何选项, _git apply_ 将读取并输出所请求的信息,而不实际应用该补丁。在这些标志之后给这个标志也应用补丁。 ``` --no-add ``` 应用补丁时,忽略补丁所做的添加。这可用于通过首先在它们上运行 _diff_ 并使用此选项应用结果来提取两个文件之间的公共部分,这将应用删除部分但不应用添加部分。 ``` --allow-binary-replacement ``` ``` --binary ``` 从历史上看,我们不允许在没有用户明确许可的情况下应用二进制补丁,并且这个标志就是这样做的。目前我们总是允许二进制补丁应用,所以这是一个无操作。 ``` --exclude=<path-pattern> ``` 不要对与给定路径模式匹配的文件应用更改。在导入要在其中排除某些文件或目录的补丁集时,这非常有用。 ``` --include=<path-pattern> ``` 将更改应用于与给定路径模式匹配的文件。在导入要包含某些文件或目录的补丁集时,这非常有用。 使用`--exclude`和`--include`模式时,将按照它们在命令行中出现的顺序检查它们,第一个匹配项确定是否使用了每个路径的补丁。如果命令行上没有包含模式,则默认情况下使用与任何包含/排除模式不匹配的路径的修补程序,如果存在任何包含模式,则忽略该修补程序。 ``` --ignore-space-change ``` ``` --ignore-whitespace ``` 应用修补程序时,如有必要,请忽略上下文行中的空白更改。上下文行将保留其空白,并且无论`--whitespace`选项的值如何,它们都不会进行空白修复。不过,新线仍将被修复。 ``` --whitespace=<action> ``` 应用修补程序时,检测具有空白错误的新行或已修改行。什么被认为是空白错误由`core.whitespace`配置控制。默认情况下,尾随空格(包括仅由空格组成的行)和在行的初始缩进内紧跟着制表符的空格字符被视为空格错误。 默认情况下,该命令会输出警告消息,但会应用修补程序。当`git-apply`用于统计而不应用补丁时,默认为`nowarn`。 您可以使用不同的`&lt;action&gt;`值来控制此行为: * `nowarn`关闭尾随空白警告。 * `warn`输出一些此类错误的警告,但按原样应用补丁(默认)。 * `fix`输出一些此类错误的警告,并在修复它们之后应用补丁(`strip`是一个同义词---用于考虑仅将空白字符作为错误尾随的工具,并且修复涉及_剥离_他们,但现代Gits做得更多)。 * `error`输出一些此类错误的警告,并拒绝应用补丁。 * `error-all`类似于`error`,但显示所有错误。 ``` --inaccurate-eof ``` 在某些情况下, _diff_ 的某些版本无法在文件末尾正确检测到丢失的换行符。因此,由 _diff_ 程序创建的补丁不能正确记录不完整的行。此选项通过解决此错误添加了对应用此类修补程序的支持。 ``` -v ``` ``` --verbose ``` 向stderr报告进度。默认情况下,仅打印有关当前正在应用的修补程序的消息。此选项将导致报告其他信息。 ``` --recount ``` 不要信任hunk标头中的行数,而是通过检查补丁来推断它们(例如,在编辑补丁之后没有适当地调整hunk标头)。 ``` --directory=<root> ``` 前置&lt; root&gt;到所有文件名。如果还传递了“-p”参数,则在添加新根之前应用它。 例如,通过运行`git apply --directory=modules/git-gui`,可以将关于更新`a/git-gui.sh`到`b/git-gui.sh`的补丁应用于工作树`modules/git-gui/git-gui.sh`中的文件。 ``` --unsafe-paths ``` 默认情况下,影响工作区域外的补丁(Git控制的工作树或当“git apply”用作GNU补丁的替代时的当前工作目录)被拒绝为错误(或恶作剧)。 当`git apply`用作“更好的GNU补丁”时,用户可以通过`--unsafe-paths`选项来覆盖此安全检查。使用`--index`或`--cached`时,此选项无效。 ## 组态 ``` apply.ignoreWhitespace ``` 如果要在默认情况下忽略空白更改,请设置为_更改_。如果您希望空格中的更改很重要,请设置为以下之一:no,none,never,false。 ``` apply.whitespace ``` 如果没有从命令行给出`--whitespace`标志,则此配置项将用作默认值。 ## 子模 如果补丁包含对子模块的任何更改,则 _git apply_ 会按如下方式处理这些更改。 如果指定`--index`(显式或隐式),则子模块提交必须与要应用的修补程序的索引完全匹配。如果检出任何子模块,则完全忽略这些检出,即,它们不需要是最新的或清洁的,并且它们不会被更新。 如果未指定`--index`,则忽略补丁中的子模块提交,并且仅检查相应子目录的缺失或存在,并且(如果可能)更新。 ## 也可以看看 [git-am [1]](https://git-scm.com/docs/git-am) 。 ## GIT 部分 [git [1]](https://git-scm.com/docs/git) 套件