首页/开发/Git 与协作速查/git format-patch 生成补丁文件
协作与代码评审75 条

git format-patch 生成补丁文件

把提交导出为邮件格式补丁(含作者、提交信息与差异),用于无平台协作的评审、跨网络传递或离线归档。

Git 与协作速查开发更新于 2026-10-13

format-patch 是什么

format-patch 把提交导出为邮件格式的补丁文件(含作者、提交信息与差异),用于无平台协作的评审、跨网络传递或离线归档;接收方用 git am 应用,作者与提交信息完整还原。这是「邮件工作流」的核心工具,上游不接受直接推送的开源项目常用它提交代码;评审意见以邮件回复,补丁以新版本重发。

基本信息

用途生成 .patch 文件序列(一个提交一个文件)
语法git format-patch -o <目录> <范围>
配套git am 应用;--cover-letter 生成说明信;-M -C 保留重命名信息
范围写法-1 HEAD 单提交;origin/main..feature 区间序列
输出命名0001-xxx.patch 顺序编号,按提交顺序应用

典型使用场景

  • 上游协作:给不接受 PR 的项目提交补丁序列。
  • 跨网传递:没有共享平台时用补丁搬运提交。
  • 离线评审:把改动打包给评审人逐条查看。
  • 版本归档:把发布区间的提交序列留档。
  • 教学讲评:把提交拆成补丁逐条讲解,便于复盘每一步。
  • 备份兜底:无法推送时的导出通道。

常用示例

常用示例
git format-patch -o /tmp/patches -1 HEAD                   # 单个提交
git format-patch --cover-letter -o /tmp/patches origin/main..feature/login   # 带说明信的序列
git format-patch -M -C -o out/ v1.2..v1.3                   # 记录重命名与复制
git am /tmp/patches/*.patch                                  # 接收方按序应用

常用选项

选项作用备注
-o指定输出目录不存在会自动创建
-1只导一个提交接在 HEAD 上
--cover-letter生成说明信便于写系列总述
-M -C检测重命名与复制补丁更小更准确
--thread按邮件线程生成便于邮件列表归档与讨论
生成的补丁可用 git am 完整还原作者与提交信息;应用失败时有三种处理:-3 尝试三方合并、--reject 保留拒绝清单、--abort 整体回退;应用前先确认工作区干净,避免半应用状态。

易错点

  • 打开邮箱自动换行或重编码会破坏补丁;传递时用附件或原样文本,复杂改动先自测一次收发。
  • 二进制改动默认随邮件输出二进制补丁,体积大且易损坏;改用 bundle 或平台协作;必须走邮件时约定好编码与行宽。
  • 忘记 -M -C 会让大改动补丁虚胖、评审困难;生成时保留重命名检测,导出后抽查一个补丁头部。
  • 区间起点包含关系写错会导出多余或漏掉提交;导出后核对文件数与提交数一致并抽查内容。

数据来源与参考

  • Git 官方文档:git-format-patch
  • Pro Git 2nd Edition · 5.3 维护项目
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌