傳統(tǒng)的patch可能會丟失一些信息邑退,git 提供兩種打patch方法竹宋, git diff ,
git format-patch,兩種的區(qū)別在于前者打出來的patch中不帶有提交信息,
后者打出來的patch帶有提交信息地技,使用起來更加方便蜈七, 但是git format-patch對補(bǔ)丁要求比較嚴(yán)格,
遇到一些沖突就無能為力了莫矗,git 提供了一套很好的機(jī)制飒硅,配合使用git format-patch 和git apply 進(jìn)行打補(bǔ)丁,
將事半功倍
下面舉例說明git 補(bǔ)丁的用法.
1 git apply , git diff 的用法
git diff commit1 commit2 > ~/patch?? 將commit1~commit2 之間的提交打成補(bǔ)蹲餮琛.
git apply ~/patch 合并補(bǔ)丁到代碼庫
當(dāng)然在合并的時(shí)候有沖突三娩,會提示失敗,可以 --reject解決
git apply --reject ~/patch? 這時(shí)候會生成一些xxx.rej的文件妹懒,就是沖突的地方雀监,不能合并進(jìn)庫,沒有沖突的地方都會合并到庫中彬伦,根據(jù)xxxx.rej 解決沖突滔悉, 刪除xxx.rej,就可以重新提交了
注意上使用git diff 產(chǎn)生的補(bǔ)丁沒有提交信息单绑,要重新提交,通過git apply 打進(jìn)來的代碼曹宴,都是相當(dāng)于新寫的代碼搂橙,可能會比較麻煩,要想生成帶有提交信息的補(bǔ)丁笛坦,就應(yīng)該用git format-patch生成補(bǔ)丁
git format-patch commid1 commid2 將commit1~commit2 之間的提交打成補(bǔ)肚.如果相差多條提交 會生成多個(gè)補(bǔ)丁,當(dāng)然也可以合并生成1個(gè)補(bǔ)丁 補(bǔ)丁的形式類似于0001-130-sync-disable-Blur.patch 是不是很清晰
git am 0001-130-sync-disable-Blur.patch 進(jìn)行打補(bǔ)丁版扩,這個(gè)就類似于cherry-pick了
當(dāng)然也可能產(chǎn)生沖突 沖突信息類似下面這樣
正應(yīng)用:130-sync: disable Blur error: 打補(bǔ)丁失敺侠搿:src/com/letv/android/cloudservice/ui/sync/DataPickFragment.java:293 error: src/com/letv/android/cloudservice/ui/sync/DataPickFragment.java:補(bǔ)丁未應(yīng)用 補(bǔ)丁失敗于 0001 130-sync: disable Blur 失敗的補(bǔ)丁文件副本位于: /home/tlinux/ex2/89962/vendor/letv/packages/LetvCloudService/.git/rebase-apply/patch 當(dāng)您解決了此問題后,執(zhí)行 "git am --continue"礁芦。 如果您想跳過此補(bǔ)丁蜻韭,則執(zhí)行 "git am --skip"悼尾。 要恢復(fù)原分支并停止打補(bǔ)丁,執(zhí)行 "git am --abort"肖方。
正應(yīng)用:130-sync: disable Blur
error: 打補(bǔ)丁失敼胛骸:src/com/xx/xx/xx/xx/xxx/XXX.java:293
error: src/com/xx/xx/xx/xx/xx/XXX.java:補(bǔ)丁未應(yīng)用
補(bǔ)丁失敗于 0001 130-sync: disable Blur
失敗的補(bǔ)丁文件副本位于:
/home/tlinux/ex2/xxx/xxx/xxx/xx/xxx/.git/rebase-apply/patch
當(dāng)您解決了此問題后,執(zhí)行 "git am --continue"俯画。
如果您想跳過此補(bǔ)丁析桥,則執(zhí)行 "git am --skip"。
要恢復(fù)原分支并停止打補(bǔ)丁艰垂,執(zhí)行 "git am --abort"泡仗。
上面的信息很清楚 在/home/tlinux/ex2/xxx/xxx/xxx/xx/xxx/.git/rebase-apply/patch 位置生成了一個(gè)path,這個(gè)path就是git diff 格式的path,然后就可以通過git apply --reject進(jìn)行打補(bǔ)丁,
解決沖突后猜憎,執(zhí)行g(shù)it am --continue沮焕,帶有提交信息的補(bǔ)丁就打好了,可以直接提交了