首页/开发/Git 与协作速查/git am 应用补丁邮件
协作与代码评审75 条

git am 应用补丁邮件

把 format-patch 生成的补丁(或 .mbox 邮件)应用到当前分支,保留原作者与提交信息;冲突时用 --3way 或手动解决后 --continue。

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

git am 是什么

把 format-patch 生成的补丁(或邮箱格式的补丁邮件)应用到当前分支:保留原作者与提交信息,适合离线协作与邮件流项目。冲突时用 -3 三方合并或手动解决后 --continue;它按顺序逐封应用,任何一封失败都会停在中途状态。

基本信息

语法git am <补丁文件…> 或 git am < 补丁
常用参数-3 三方合并、-s 附加 signoff、--abort、--skip
输入格式邮箱/补丁文件,勿手工换行破坏
当前查看git am --show-current-patch 看正在处理的补丁
失败处理解决后 --continue;跳过用 --skip;放弃用 --abort
与 apply 区别am 保留提交信息与作者,apply 只改工作区

典型使用场景

  • 离线协作:没有直连仓库时用邮件补丁流转代码。
  • 上游流程:参与邮件列表开发风格的项目的补丁提交与验收。
  • 批量回移:一串 format-patch 输出按序应用。
  • 评审验收:先在本地 am 验证补丁可应用再合入。
  • 历史修复:对旧版本分行应用补丁做修复验证。
  • 教学演示:展示补丁与提交的对应关系和署名保留。
  • 版本比对:把旧分支补丁 am 到新版本上快速验证兼容性。

常用示例

常用示例
git am -3 /tmp/patches/0001-fix.patch        # 应用单封补丁,冲突时三方合并
git am -s < /tmp/patches/0002-doc.patch      # 从标准输入应用并附加 signoff
git am /tmp/patches/*.patch                  # 按文件名顺序批量应用
git am --show-current-patch                  # 卡住时查看当前补丁内容
git am --abort                               # 放弃整个序列回到应用前

失败状态处理

场景表现处理
冲突hunk 无法应用用 -3 重试或手工修改后 --continue
中断停在应用序列中间--continue 或整段 --abort
格式损坏解析失败报错重新获取原始补丁文件
收到补丁先 --show-current-patch 查看当前处理内容;应用后在本地跑测试再推送到合适分支;失败停在中途时不要直接切分支,先解决或 abort。;用 --skip 跳过的补丁要记录原因,避免静默丢失改动。

易错点

  • 补丁与当前代码差异过大时三方合并也会失败,先确认基点版本是否匹配。,必要时按目标分支 rebase 补丁后重试。
  • am 失败会停在中间状态,处理完再用 --continue,直接切分支会留下半应用状态。
  • 手工编辑补丁文件破坏格式(换行、首行)会导致解析失败,保护原始文件流转。
  • 批量应用多个补丁时,前面失败后续不会继续,先修好顺序中的第一封再重跑。

数据来源与参考

  • Git 官方文档:git-am
  • Git 官方文档:git-format-patch
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌