参考1:https://www.jianshu.com/p/ec04de3f95cc
参考2:https://blog.csdn.net/sinat_20059415/article/details/80598347
参考3:https://www.jianshu.com/p/4e0bd72572cf
一,补丁的理解
1,补丁其实是基于commit的的管理,使项目开发低耦合可配置;git 中的每个commit都有对应的一个sha1 id;
2,有2种补丁方式:
.diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件。
.patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件。
.patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件。
二,相关命令
1,打补丁
//方法一:format-patch git format-patch 【commit sha1 id】-n #次提交(含)之前的几次提交 git format-patch 【commit sha1 id】 -1 #某个提交的patch git format-patch 【commit sha1 id】..【commit sha1 id】 #某两次提交之间的所有patch //方法二: git diff 【commit sha1 id】 【commit sha1 id】 > 【diff文件名】#diff文件名后缀可以是.diff或者.patch
2,应用补丁
//检查patch/diff是否能正常打入 git apply --check 【path/to/xxx.patch】 git apply --check 【path/to/xxx.diff】 //打入补丁 git apply 【path/to/xxx.patch】#打单个补丁 git apply 【path/to/xxx.diff】 git am 【path/to/xxx.patch】#可以打多个补丁
3,解决冲突
参考:https://blog.csdn.net/weicaihui2008/article/details/99693829
出现冲突补丁会打入失败
继续打补丁
//1,自动合入 patch 中不冲突的代码改动,同时保留冲突的部分 git apply [--reject] xxxx.patch #会生成后缀为 .rej 的文件,保存没有合并进去的部分的内容,可以参考这个进行冲突解决。解决完冲突后删除后缀为 .rej 的文件, //2,解决完冲突后执行git add. 添加改动到暂存区 //3,执行git am --resolved或者git am --continue
跳过该冲突
git am --skip #不能解决想后面再说
恢复原分支并停止
git am --abort