如何在 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.patchformat-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/*.patchgit apply 和 git am 有什么区别?
git apply | git am | |
|---|---|---|
| 读 | 任何差异 | 来自 git format-patch 或邮箱的文件 |
| 结果 | 更改文件,未提交 | 每个补丁一次提交 |
| 保留消息和作者 | 否 | 是的 |
| 论失败 | 默认情况下不应用任何内容 | 停止;继续或git am --abort |
如何修复“补丁不适用”?
error: patch failed: src/search.ts:14
error: src/search.ts: patch does not apply自打补丁以来该文件已更改,因此其上下文行不再匹配。按顺序尝试这些:
git apply --3way fix.patch使用原始 blob 进行合并,并留下正常的冲突标记。它需要您的存储库中的这些 blob。- 当只有空格或行结尾不同时,
git apply --whitespace=fix fix.patch会有所帮助。 git apply --reject fix.patch应用其所能,并将失败的部分写入.rej文件中,供您手动执行。- 检查补丁的提交,将其应用到那里,然后重新设置基准。
对于 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 中创建并应用补丁
保存补丁
右键单击提交并打开复制,然后从提交创建补丁...。选择 从提交创建补丁… 的多个提交,或右键单击已更改的文件以 从文件更改创建补丁…。
应用补丁
从命令面板运行 应用补丁... 并选择文件。 GitTree 表示它保存了多少个文件和提交,以及是否包含二进制更改。
选择如何应用它
在 应用到 下,选择 仅工作树 (
git apply)、工作树并暂存更改 (git apply --index) 或 作为当前分支上的提交 (git am),然后按 应用。

创建和应用补丁 指南列出了每个选项。
常见问题
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日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。
