跳至内容
GitTree
Git 指南阅读 2 分钟

如何在 Git 中创建和应用补丁

补丁以纯文本文件的形式携带存储库之间的更改。以下是何时使用 git diff 或 git format-patch、何时使用 git apply 或 git am,以及如何修复拒绝应用的补丁。

撰写者 Kodmora

GitTree 背后的软件公司

已更新
  • 提交
  • 远程仓库和推送
在此页面上

要创建补丁,请针对未提交的更改运行 `git diff > fix.patch`,或者针对上次提交运行 `git format-patch -1 HEAD`。要应用其中一项,请运行 `git apply fix.patch` 或 `git am 0001-my-change.patch`。 当您只想在工作文件夹中进行更改时,请使用 git apply。当您想要原始提交及其消息和作者时,请使用 git am。

什么是 Git 补丁?

补丁是一个文本文件,列出了要在哪些文件中删除和添加哪些行。它适合无法推送到同一远程的情况:通过电子邮件发送修复、在不相关的存储库之间移动更改或将本地更改保留在版本控制之外。当您和其他人共享远程仓库时,分支会更简单。

如何根据未提交的更改创建补丁?

# unstaged changes
git diff > fix.patch

# staged changes
git diff --staged > fix.patch

# everything since the last commit
git diff HEAD > fix.patch

# include binary files
git diff --binary > fix.patch

未暂存的新文件不会出现在 git diff 中。首先对它们运行 git add 并使用 --staged。

如何从提交创建补丁?

# the last commit
git format-patch -1 HEAD

# the last three commits, one file each
git format-patch -3

# everything on this branch that main does not have
git format-patch main..feature/search -o patches/

# all of it in a single file
git format-patch main --stdout > feature.patch

format-patch 写入名为 0001-add-search-box.patch 的文件。每个都保留提交的消息、作者和日期,而普通的 git diff 会丢失这些内容。

如何应用补丁?

先检查一下。这两个命令没有改变:

# what it touches
git apply --stat fix.patch

# whether it will apply
git apply --check fix.patch

然后按照您需要的方式应用它:

# into the working folder, nothing staged
git apply fix.patch

# into the working folder and the staging area
git apply --index fix.patch

# as commits, with their messages and authors
git am patches/*.patch

git apply 和 git am 有什么区别?

git apply 与 git am 对比
git applygit am
读任何差异来自 git format-patch 或邮箱的文件
结果更改文件,未提交每个补丁一次提交
保留消息和作者否是的
论失败默认情况下不应用任何内容停止;继续或git am --abort

如何修复“补丁不适用”?

error: patch failed: src/search.ts:14
error: src/search.ts: patch does not apply

自打补丁以来该文件已更改,因此其上下文行不再匹配。按顺序尝试这些:

  1. git apply --3way fix.patch 使用原始 blob 进行合并,并留下正常的冲突标记。它需要您的存储库中的这些 blob。
  2. 当只有空格或行结尾不同时,git apply --whitespace=fix fix.patch 会有所帮助。
  3. git apply --reject fix.patch 应用其所能,并将失败的部分写入 .rej 文件中,供您手动执行。
  4. 检查补丁的提交,将其应用到那里,然后重新设置基准。

对于 git am,使用 git am --3way,解决冲突,git add 文件并运行 git am --continue。要退出,请运行 git am --abort,如如何中止合并或变基 中所列。

如何撤消补丁?

git apply -R fix.patch

-R 反向应用补丁。如果您使用了 git am,则提交是正常提交​​,因此请使用 `git reset` 或 `git revert` 撤消它们。

如何在 GitTree 中创建并应用补丁

  1. 保存补丁

    右键单击提交并打开复制,然后从提交创建补丁...。选择 从提交创建补丁… 的多个提交,或右键单击已更改的文件以 从文件更改创建补丁…。

  2. 应用补丁

    从命令面板运行 应用补丁... 并选择文件。 GitTree 表示它保存了多少个文件和提交,以及是否包含二进制更改。

  3. 选择如何应用它

    在 应用到 下,选择 仅工作树 (git apply)、工作树并暂存更改 (git apply --index) 或 作为当前分支上的提交 (git am),然后按 应用。

在 GitTree 中提交的复制子菜单中从提交创建补丁...。
在 GitTree 中提交的复制子菜单中从提交创建补丁...。GitTree 与演示存储库的接口。

创建和应用补丁 指南列出了每个选项。

常见问题

git diff 和 git format-patch 有什么区别?

git diff 仅写入更改。 git format-patch 每次提交都会写入一个文件,其中包含消息、作者和日期,因此 git am 可以重新创建该提交。

git apply 是否创建提交?

不。它只会更改文件。检查它们,然后照常提交。使用 git am 获取提交。

如何应用 GitHub 的补丁?

将 .patch 添加到 GitHub 上提交或拉取请求 URL 的末尾,下载文件并对其运行 git am。

补丁可以包含二进制文件吗?

是的,如果您使用 git diff --binary 创建它。默认情况下,git format-patch 包括二进制更改。

樱桃采摘比补丁更好吗?

当两个提交都在一个存储库或获取的远程库中时,是的:`git cherry-pick` 更短并跟踪源提交。补丁适用于存储库无法相互访问的情况。

来源

有关其他产品的声明已根据其位于 2026年11月7日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。