?$ git format-patch [-s]? <引用或其范圍>
// 將特定的一個(gè)提交或一個(gè)范圍內(nèi)的提交("HEAD~3...HEAD"等價(jià)于"HEAD HEAD^ HEAD^^")轉(zhuǎn)換成補(bǔ)丁文件翅敌,加上s 參數(shù)表示在補(bǔ)丁說明中加入作者姓名羞福。
?$ git send-email *.patch
// 將補(bǔ)丁文件用郵件的方式發(fā)送給PM(項(xiàng)目經(jīng)理) ,郵件接受者打開mail ,可以將收到的補(bǔ)丁郵件挑選出來蚯涮,保存在一個(gè)mbox格式的文件中治专。例如執(zhí)行mail 命令后,在mail 命令行中執(zhí)行
& s 1-3 user1-mail-archive
表示將收件箱中前三封郵件歸檔在user1-mail-archive文件中遭顶。當(dāng)然這個(gè)文件可以通過執(zhí)行mail -f user1-mail-archive打開查看张峰。
?$ git am user1-mail-archive
// 此時(shí)當(dāng)把heads 退回到HEAD~3 時(shí),再執(zhí)行上述命令就可以成功打上3補(bǔ)丁棒旗,使heads 再次指向原HEAD喘批。
?$ cat? *.patch | git am
// 打補(bǔ)丁文件*.patch。該補(bǔ)丁文件可以是u 盤靠過來的铣揉,或是其他人任何非mail 形式獲取的補(bǔ)丁文件饶深。
還有另外兩個(gè)補(bǔ)丁管理工具StGit和 Quilt
以StGit 為例來說明:
安裝
// 可以通過apt install stgit stgit-contrib安裝
安裝好之后,進(jìn)入工作區(qū)逛拱。首先初始化stgit
?$ stg init //初始化
?$ stg series //查看補(bǔ)丁列表
?$ stg uncommit -n<num>
// 將最近num個(gè)提交預(yù)選為補(bǔ)丁文件源敌厘,壓入補(bǔ)丁棧中。注意此時(shí)分支master沒變化朽合。
?$ stg pop [-a]
?// 彈出棧頂補(bǔ)丁文件俱两,同時(shí)刪除對應(yīng)的提交。如果加上a參數(shù)旁舰,表示彈出所有棧中的補(bǔ)丁文件,并將master 重置到最后一個(gè)補(bǔ)丁文件之后的提交嗡官。
?$ stg push
?$ stg goto <x.patch>
// 前者打棧頂補(bǔ)丁到分支中箭窜,后者將指定補(bǔ)丁打到分支中。
?$ stg refresh
//當(dāng)打完一個(gè)補(bǔ)丁后衍腥,發(fā)現(xiàn)其中有一個(gè)小的bug,我們可以在工作區(qū)修改完后磺樱,不加入暫存區(qū)纳猫,直接執(zhí)行上述補(bǔ)丁刷新命令,此時(shí)你打過的補(bǔ)丁會自動更新竹捉,而不必再產(chǎn)生一個(gè)提交芜辕。
?$ stg push + $ stg refresh
// 因?yàn)橹暗难a(bǔ)丁有更新,導(dǎo)致執(zhí)行stg push 后再往后打補(bǔ)丁有可能會遇到?jīng)_突块差,此時(shí)可以直接編輯沖突文件侵续,之后添加到暫存區(qū),不提交直接執(zhí)行stg refresh 憨闰。更新補(bǔ)丁文件的同時(shí)更新提交状蜗。
?$ stg export -d patchs
//將補(bǔ)丁文件導(dǎo)出到patchs 目錄,且目錄里除了補(bǔ)丁文件之外鹉动,還會包含一個(gè)說明補(bǔ)丁順序的文件series