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 跳过的补丁要记录原因,避免静默丢失改动。