git diff & git format-patch

参考自:http://blog.csdn.net/ic_soc_arm_robin/article/details/8063221

git提供了两种简单的patch方案。一是用git diff生成的标准patch,二是git format-patch生成的Git专用Patch。

git diff生成的Patch兼容性强。如果你在修改的代码的官方版本库不是Git管理的版本库,那么你必须使用git diff生成的patch才能让你的代码被项目的维护人接受。
先检查patch文件:git apply –stat newpatch.patch
查看补丁是否能够干净顺利地应用到当前分支中: git apply –check newpatch.patch
对于git diff生成的patch,你可以用git apply –check

 

如果patch名称类似于:
0001–JFFS2-community-fix-with-not-use-OOB.patch
0002–Community-patch-for-Fix-mount-error-in.patch
0003–partial-low-interrupt-latency-mode-for-ARM113.patch

则这些patch是用 git format-patch 生成的,这些patch文件内包含了所有必要的信息,当然也包含了git diff生成的信息。这些patch需要使用:

git am file.patch

导入到库中,如果执行时失败,则最好执行:

git am –abort

将patch做适当修改后,再次尝试

 

由于git format-patch生成的补丁中含有这个补丁开发者的名字,因此在应用补丁时,这个名字会被记录进版本库,显然,这样做是恰当的。因此,目前使用Git的开源社区往往建议大家使用format-patch生成补丁。

当然,使用 git format-patch生成的patch文件,也可以使用 git apply file.patch,将修改的部分引入库中,但是file.pathch内的部分信息会丢失(例如,comments)

 

使用 git format-patch时,其生成的patch是依次编号的,编号后再接简化的comment.patch

 

git format-patch的使用:
git format-patch -3
过程是,将HEAD和HEAD^相比,生成0003.xxx.patch, 将HEAD^和HEAD^^相比,生成0002.xxx.patch, 将HEAD^^和HEAD^^^相比,生成0003.xxx.patch
git am时可以依编号从小到大进行,也可以git am path/*.patch(git am会自动依编好从小到大进行)

 

git format-patch -s 4e16          // 某次提交以后的所有patch, --4e16指的是SHA1 ID, -s : signed off

git format-patch -1                  //  单次提交

git format-patch -3                  // 从head往前3个提交的内容,可修改为你想要的数值

git format-patch –n 07fe          // -n指patch数,07fe对应提交的名称, 某次提交(含)之前的几次提交

git format-patch -1 commit-id   // + commit-id 选定的那个commit打patch

 

点赞