git-apply

    git-apply - 将补丁应用于文件和/或索引

    概要

    读取提供的diff输出(即“补丁”)并将其应用于文件。从存储库中的子目录运行时,将忽略目录外的修补路径。使用选项,补丁也会应用于索引,而使用--cached选项,补丁仅应用于索引。如果没有这些选项,该命令仅将补丁应用于文件,并且不要求它们位于Git存储库中。

    此命令应用修补程序但不创建提交。使用 从 git-format-patch [1] 生成的补丁创建提交和/或通过电子邮件接收。

    OPTIONS

    1. <patch>…​

    从中读取补丁的文件。 - 可用于从标准输入读取。

    1. --stat

    而不是应用补丁,输入diffstat作为输入。关闭“申请”。

    1. --numstat

    --stat类似,但以十进制表示法显示添加和删除的行数,不使用缩写表示路径名,以使其更加机器友好。对于二进制文件,输出两个-而不是0 0。关闭“申请”。

    1. --summary

    而不是应用补丁,输出从git diff扩展头获取的信息的精简摘要,例如创建,重命名和模式更改。关闭“申请”。

    1. --check

    而不是应用修补程序,查看修补程序是否适用于当前工作树和/或索引文件并检测错误。关闭“申请”。

    1. --index

    --check生效时,或者应用补丁时(默认情况下,如果没有禁用它的选项生效),请确保补丁适用于当前索引文件记录的内容。如果要在工作树中修补的文件不是最新的,则会将其标记为错误。此标志还会导致更新索引文件。

      在不触及工作树的情况下应用补丁。而是使用缓存数据,应用补丁,并将结果存储在索引中,而不使用工作树。这意味着--index

      1. --intent-to-add

      仅将补丁应用于工作树时,请稍后将新文件标记为添加到索引中(请参阅 中的--intent-to-add选项)。除非在Git存储库中运行并且未指定--index,否则将忽略此选项。请注意,--index可能隐含在--cached--3way等其他选项中。

      1. -3
      1. --3way

      当补丁不能干净地应用时,如果补丁记录了应该应用的blob的身份,则回退到三向合并,并且我们在本地可以使用这些blob,可能会将冲突标记留在工作树中的文件中供用户解决。此选项隐含--index选项,与--reject--cached选项不兼容。

      1. --build-fake-ancestor=<file>

      较新的 git diff 输出为每个blob嵌入了索引信息,以帮助识别该补丁适用的原始版本。给出此标志,并且如果Blob的原始版本在本地可用,则构建包含这些blob的临时索引。

      遇到纯模式更改(没有索引信息)时,将从当前索引读取信息。

      反向应用补丁。

      1. --reject

      对于原子性,默认情况下 git apply 会使整个补丁失败,并且当某些黑客不适用时不会触及工作树。此选项使其应用适用的修补程序部分,并将拒绝的数据保留在相应的* .rej文件中。

      1. -z

      如果没有此选项,则会引用具有“异常”字符的路径名,如配置变量core.quotePath所述(参见 git-config [1] )。

      1. -p<n>

      删除< n>传统差异路径的前导路径组件(由斜线分隔)。例如,使用-p2,针对a/dir/file的补丁将直接应用于file。默认值为1。

      1. -C<n>

      确保至少< n>周围环境的线在每次更改之前和之后匹配。当存在较少的周围环境线时,它们都必须匹配。默认情况下,不会忽略任何上下文。

      1. --unidiff-zero

      默认情况下, git apply 期望应用的补丁是具有至少一行上下文的统一差异。这提供了良好的安全措施,但在应用--unified=0生成的差异时会出现故障。要绕过这些检查,请使用--unidiff-zero

      请注意,由于上述原因,不鼓励使用无上下文补丁。

      1. --apply

      如果您使用上面标记为“关闭应用”的任何选项, git apply 将读取并输出所请求的信息,而不实际应用该补丁。在这些标志之后给这个标志也应用补丁。

      1. --no-add

      应用补丁时,忽略补丁所做的添加。这可用于通过首先在它们上运行 diff 并使用此选项应用结果来提取两个文件之间的公共部分,这将应用删除部分但不应用添加部分。

      1. --allow-binary-replacement
      1. --binary

      从历史上看,我们不允许在没有用户明确许可的情况下应用二进制补丁,并且这个标志就是这样做的。目前我们总是允许二进制补丁应用,所以这是一个无操作。

        不要对与给定路径模式匹配的文件应用更改。在导入要在其中排除某些文件或目录的补丁集时,这非常有用。

        将更改应用于与给定路径模式匹配的文件。在导入要包含某些文件或目录的补丁集时,这非常有用。

        使用--exclude--include模式时,将按照它们在命令行中出现的顺序检查它们,第一个匹配项确定是否使用了每个路径的补丁。如果命令行上没有包含模式,则默认情况下使用与任何包含/排除模式不匹配的路径的修补程序,如果存在任何包含模式,则忽略该修补程序。

        1. --ignore-space-change
        1. --ignore-whitespace

        应用修补程序时,如有必要,请忽略上下文行中的空白更改。上下文行将保留其空白,并且无论--whitespace选项的值如何,它们都不会进行空白修复。不过,新线仍将被修复。

        1. --whitespace=<action>

        应用修补程序时,检测具有空白错误的新行或已修改行。什么被认为是空白错误由core.whitespace配置控制。默认情况下,尾随空格(包括仅由空格组成的行)和在行的初始缩进内紧跟着制表符的空格字符被视为空格错误。

        默认情况下,该命令会输出警告消息,但会应用修补程序。当git-apply用于统计而不应用补丁时,默认为。

        您可以使用不同的&lt;action&gt;值来控制此行为:

        • nowarn关闭尾随空白警告。

        • fix输出一些此类错误的警告,并在修复它们之后应用补丁(strip是一个同义词—-用于考虑仅将空白字符作为错误尾随的工具,并且修复涉及剥离他们,但现代Gits做得更多)。

        • error输出一些此类错误的警告,并拒绝应用补丁。

        • error-all类似于error,但显示所有错误。

        1. --inaccurate-eof

        在某些情况下, diff 的某些版本无法在文件末尾正确检测到丢失的换行符。因此,由 diff 程序创建的补丁不能正确记录不完整的行。此选项通过解决此错误添加了对应用此类修补程序的支持。

        1. -v
        1. --verbose

        向stderr报告进度。默认情况下,仅打印有关当前正在应用的修补程序的消息。此选项将导致报告其他信息。

        1. --recount

        不要信任hunk标头中的行数,而是通过检查补丁来推断它们(例如,在编辑补丁之后没有适当地调整hunk标头)。

        1. --directory=<root>

        前置< root>到所有文件名。如果还传递了“-p”参数,则在添加新根之前应用它。

        例如,通过运行git apply --directory=modules/git-gui,可以将关于更新a/git-gui.shb/git-gui.sh的补丁应用于工作树modules/git-gui/git-gui.sh中的文件。

        1. --unsafe-paths

        默认情况下,影响工作区域外的补丁(Git控制的工作树或当“git apply”用作GNU补丁的替代时的当前工作目录)被拒绝为错误(或恶作剧)。

        git apply用作“更好的GNU补丁”时,用户可以通过--unsafe-paths选项来覆盖此安全检查。使用--index--cached时,此选项无效。

          如果要在默认情况下忽略空白更改,请设置为更改。如果您希望空格中的更改很重要,请设置为以下之一:no,none,never,false。

          1. apply.whitespace

          如果没有从命令行给出--whitespace标志,则此配置项将用作默认值。

          子模

          如果补丁包含对子模块的任何更改,则 git apply 会按如下方式处理这些更改。

          如果指定(显式或隐式),则子模块提交必须与要应用的修补程序的索引完全匹配。如果检出任何子模块,则完全忽略这些检出,即,它们不需要是最新的或清洁的,并且它们不会被更新。

          如果未指定--index,则忽略补丁中的子模块提交,并且仅检查相应子目录的缺失或存在,并且(如果可能)更新。

          GIT