Git Patch 使用详解:生成、应用与多提交合并导出
在多人协作、代码审查、离线提交或跨仓库迁移的场景中,git patch 是非常实用的技术。本文将系统地介绍如何使用 Git 的补丁机制导出和应用修改内容。
📖 什么是 Git Patch?
严格来说,git patch 并不是一个 Git 命令,而是指 使用 Git 的补丁机制,借助以下命令完成相关操作:
git diffgit format-patchgit applygit am
这些命令共同构成了 Git 补丁工作流。
📦 Git Patch 常用工作流概览
🔹 1. 生成 Patch 文件
✅ 方法 1:仅导出修改内容(不含提交信息)
git diff > my.patch
生成的是基于当前修改与 HEAD 差异的补丁,适合用于分享尚未提交的改动。
✅ 方法 2:导出带有提交历史的补丁(推荐)
# 导出某一次提交git format-patch -1 <commit-hash># 导出最近 3 次提交git format-patch -3# 导出当前分支与主分支之间的所有提交git format-patch origin/main..HEAD
这些命令会生成 .patch 文件,每个提交一个文件,名称格式如:
0001-描述.patch0002-描述.patch
你可以通过 --output-directory= 指定生成路径:
git format-patch origin/main --output-directory=./patches
🔹 2. 应用 Patch 文件
✅ 使用 git apply(不记录提交)
git apply my.patch
- 只会应用内容,不保留原始提交记录。
- 无法撤销,建议先备份或使用
git apply -R撤销。
✅ 使用 git am(保留原始提交信息)
git am 0001-*.patch
或批量导入所有补丁:
git am *.patch
如果出现冲突,可通过:
git am --abort中止操作git am --skip跳过冲突补丁git am --continue解决冲突后继续应用
🧰 常用命令整理(速查表)
git diff > my.patchgit format-patch -Ngit format-patch -1 git format-patch origin/main..HEADcat *.patch > all-in-one.patchgit apply my.patchgit am *.patchgit apply -R my.patchgit am --abort🎯 进阶:合并多个提交为一个 Patch
如果你有多个已提交的记录想合并为一个 patch,可使用如下方法:
✅ 步骤一:交互式 rebase 合并多个提交
git rebase -i HEAD~3 # 合并最近 3 次提交
将后两个提交改为 squash,保存退出。
✅ 步骤二:导出合并后的单一提交
git format-patch -1 HEAD
✅ 典型场景:迁移提交到另一个仓库
- 在源仓库使用
git format-patch导出提交 - 在目标仓库使用
git am应用补丁
# 在源仓库git format-patch origin/main..HEAD --output-directory=./patch# 在目标仓库git am ./patch/*.patch
📌 注意事项
- 使用
git apply时不生成提交记录,适合轻量临时修改; - 使用
git am会保留作者、提交信息等元数据; - patch 文件应用失败时,一定记得
git am --abort清理状态; - patch 文件内容依赖于当前目录的状态,请保持代码干净。
✅ 小结
git diffgit format-patchgit applygit am

