$ git format-patch [-s] <引用或其范围>
// 将特定的一个提交或一个范围内的提交("HEAD~3...HEAD"等价于"HEAD HEAD^ HEAD^^")转换成补丁文件,加上s 参数表示在补丁说明中加入作者姓名。
$ git send-email *.patch
// 将补丁文件用邮件的方式发送给PM(项目经理) ,邮件接受者打开mail ,可以将收到的补丁邮件挑选出来,保存在一个mbox格式的文件中。例如执行mail 命令后,在mail 命令行中执行
& s 1-3 user1-mail-archive
表示将收件箱中前三封邮件归档在user1-mail-archive文件中。当然这个文件可以通过执行mail -f user1-mail-archive打开查看。
$ git am user1-mail-archive
// 此时当把heads 退回到HEAD~3 时,再执行上述命令就可以成功打上3补丁,使heads 再次指向原HEAD。
$ cat *.patch | git am
// 打补丁文件*.patch。该补丁文件可以是u 盘靠过来的,或是其他人任何非mail 形式获取的补丁文件。
还有另外两个补丁管理工具StGit和 Quilt
以StGit 为例来说明:
安装
// 可以通过apt install stgit stgit-contrib安装
安装好之后,进入工作区。首先初始化stgit
$ stg init //初始化
$ stg series //查看补丁列表
$ stg uncommit -n<num>
// 将最近num个提交预选为补丁文件源,压入补丁栈中。注意此时分支master没变化。
$ stg pop [-a]
// 弹出栈顶补丁文件,同时删除对应的提交。如果加上a参数,表示弹出所有栈中的补丁文件,并将master 重置到最后一个补丁文件之后的提交。
$ stg push
$ stg goto <x.patch>
// 前者打栈顶补丁到分支中,后者将指定补丁打到分支中。
$ stg refresh
//当打完一个补丁后,发现其中有一个小的bug,我们可以在工作区修改完后,不加入暂存区,直接执行上述补丁刷新命令,此时你打过的补丁会自动更新,而不必再产生一个提交。
$ stg push + $ stg refresh
// 因为之前的补丁有更新,导致执行stg push 后再往后打补丁有可能会遇到冲突,此时可以直接编辑冲突文件,之后添加到暂存区,不提交直接执行stg refresh 。更新补丁文件的同时更新提交。
$ stg export -d patchs
//将补丁文件导出到patchs 目录,且目录里除了补丁文件之外,还会包含一个说明补丁顺序的文件series