參考自: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
