在 Git 中,生成和应用补丁(patch)是常见的协作方式,尤其适用于未直接推送到远程仓库的代码更改。以下是完整的操作指南:
一、生成 Patch(补丁文件)
1. 生成最近一次提交的补丁
git format-patch -1
这会生成一个 .patch 文件,命名格式为 0001-<提交信息>.patch。
2. 生成最近 N 次提交的补丁
git format-patch -3
生成最近 3 次提交的补丁文件。
3. 生成两个 commit 之间的补丁
git format-patch <起始commit>..<结束commit>
例如:
git format-patch a1b2c3d..e4f5g6h
4. 生成所有未推送到远程的提交补丁
git format-patch origin/main
将当前分支相对于 origin/main 的所有提交生成补丁。
5. 生成单个文件的补丁(不基于提交)
git diff > my_changes.patch
生成当前工作区与暂存区的差异补丁(未提交的更改)。
6. 生成暂存区与上次提交的补丁
git diff --staged > staged_changes.patch
二、应用 Patch(打补丁)
1. 使用 git apply(适用于所有 patch 格式)
git apply <patch文件>
特点:
- 不会自动创建提交
- 静默应用,无额外信息
- 适用于
git diff生成的补丁
检查补丁是否可应用:
git apply --check <patch文件>
2. 使用 git am(适用于 format-patch 生成的补丁)
git am <patch文件>
特点:
- 自动创建提交
- 保留作者、日期、提交信息
- 更适合邮件协作场景
处理冲突:
# 解决冲突后
git add <解决的文件>
git am --continue
# 跳过当前补丁
git am --skip
# 终止应用
git am --abort
3. 应用多个补丁文件
git am *.patch
按文件名顺序依次应用所有 .patch 文件。
三、常用参数对比
| 命令 | 生成方式 | 应用方式 | 是否自动提交 |
|---|---|---|---|
git diff > patch | git diff | git apply | 否 |
git format-patch | 基于提交 | git am | 是 |
四、实际工作流程示例
场景:本地提交待分享
# 1. 提交更改
git add .
git commit -m "修复登录页面样式问题"
# 2. 生成补丁
git format-patch -1
# 生成: 0001-修复登录页面样式问题.patch
# 3. 发送补丁给同事(邮件/即时通讯)
场景:接收补丁并应用
# 1. 保存补丁文件到项目目录
# 2. 检查补丁
git apply --check 0001-修复登录页面样式问题.patch
# 3. 应用并提交
git am 0001-修复登录页面样式问题.patch
五、高级用法
1. 带统计信息的补丁
git format-patch -1 --stat
2. 添加签名
git format-patch -1 --signoff
3. 输出到指定目录
git format-patch -1 -o patches/
4. 应用补丁时添加签名
git am --signoff <patch文件>
六、注意事项
编码问题:补丁文件使用 UTF-8 编码,跨平台时注意换行符。
空行问题:git am 对格式要求严格,确保补丁来自 git format-patch。
冲突处理:遇到冲突优先手动解决,不要强制应用。
文件路径:补丁中的路径相对于项目根目录,应用时需在正确位置。
1万+

被折叠的 条评论
为什么被折叠?



