1、创建补丁
1.1 git format-patch 起始哈希值..结束哈希值
说明:创建补丁,哈希值前开后合(起始哈希值对应的提交没有被包含)
如:分支图示:A---B---C---D---E
命令:git format-patch C..E
结果:创建补丁文件D.patch和E.patch
1.2 git format-patch 分支A
说明:创建补丁,起始哈希值(当前分支和分支A的共同祖先哈希值) 结束哈希值(当前分支最新哈希值)
如:分支图示: F---G---H 当前分支
/
A---B---C---D---E 分支A
命令:在当前分支上操作 git format-patch 分支A
结果:创建补丁文件F.patch 、G.patch和H.patch
2、验证补丁能否应用成功
2.1 git apply --stat 补丁文件
2.1 git apply --check 补丁文件
3、应用补丁
3.1 git am -3 补丁文件
说明:出现冲突中断要求解决时
自动合并的文件已 进入暂存区,不需要手动add
冲突文件的状态是 UU,文件里用<<< ===>>> 来标识,手动合并后需要手动add该文件
解决冲突后,用git am--resolved 继续应用补丁
如:补丁文件包含 文件1 文件2 文件3 (文件2 有冲突不能自动合并)
应用过程中断,显示状态
M 文件1
UU 文件2
M 文件3
手动解决文件2的冲突,然后git add 文件2
最后 git am --resolved
3.2 git am --reject 补丁文件
说明:出现冲突中断要求解决时
自动合并的文件放在工作区,需要手动add
生成.rej文件,参照.rej文件手动合并
手动add自动合并和冲突的文件
解决冲突后,用git am--resolved 继续应用补丁
如:补丁文件包含 文件1 文件2 文件3 (文件2 有冲突不能自动合并)
应用过程中断,显示状态
M 文件1
?? 文件2.rej
M 文件3
参照文件2.rej手动解决文件2的冲突,然后删除文件2.rej,git add文件1 文件2 文件3
最后 git am --resolved
注:在应用补丁前,最好gitstatus 是空的(即所有修改的文件都进库,或者 用 git stash -u 来暂存修改未进库的文件),避免应用补丁过程需要解决冲突,未应用成功的文件存放在工作区或暂存区,和已有修改的文件混淆。