GIT补丁怎么打?

‌$ 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本片内容转自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃儿阅读 4,956评论 2 88
  • 1. GIT命令 git init在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个re...
    江边一蓑烟阅读 827评论 0 0
  • 小偷先生: 最近"生意"好吗?最近,总能在手机、电视上看到这个人丟了钱,那个人丢了首饰。相信你的生意肯定很火...
    欢乐洋阅读 242评论 0 0
  • 先mark,挑一些我喜欢的诗歌给自己(( ´ ‸')哼 其实是觉得说给你们会觉着自己矫情)…… 即使排版花了些时间...
    林守恒阅读 359评论 0 2
  • 羡慕她,是因为她拥有你所没有而又想拥有的,然而无论如何努力也无法得到的…他的温柔与温暖 清晨,其实是一种幸福的味道...
    FXQ阅读 145评论 0 0