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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM