傳統(tǒng)的patch可能會(huì)丟失一些信息,git 提供兩種打patch方法, git diff ,
git format-patch,兩種的區(qū)別在于前者打出來(lái)的patch中不帶有提交信息,
后者打出來(lái)的patch帶有提交信息,使用起來(lái)更加方便, 但是git format-patch對(duì)補(bǔ)丁要求比較嚴(yán)格,
遇到一些沖突就無(wú)能為力了,git 提供了一套很好的機(jī)制,配合使用git format-patch 和git apply 進(jìn)行打補(bǔ)丁,
將事半功倍
下面舉例說(shuō)明git 補(bǔ)丁的用法.
1 git apply , git diff 的用法
git diff commit1 commit2 > ~/patch?? 將commit1~commit2 之間的提交打成補(bǔ)?。?/p>
git apply ~/patch 合并補(bǔ)丁到代碼庫(kù)
當(dāng)然在合并的時(shí)候有沖突,會(huì)提示失敗,可以 --reject解決
git apply --reject ~/patch? 這時(shí)候會(huì)生成一些xxx.rej的文件,就是沖突的地方,不能合并進(jìn)庫(kù),沒(méi)有沖突的地方都會(huì)合并到庫(kù)中,根據(jù)xxxx.rej 解決沖突, 刪除xxx.rej,就可以重新提交了
注意上使用git diff 產(chǎn)生的補(bǔ)丁沒(méi)有提交信息,要重新提交,通過(guò)git apply 打進(jìn)來(lái)的代碼,都是相當(dāng)于新寫(xiě)的代碼,可能會(huì)比較麻煩,要想生成帶有提交信息的補(bǔ)丁,就應(yīng)該用git format-patch生成補(bǔ)丁
git format-patch commid1 commid2 將commit1~commit2 之間的提交打成補(bǔ)?。绻嗖疃鄺l提交 會(huì)生成多個(gè)補(bǔ)丁,當(dāng)然也可以合并生成1個(gè)補(bǔ)丁 補(bǔ)丁的形式類(lèi)似于0001-130-sync-disable-Blur.patch 是不是很清晰
git am 0001-130-sync-disable-Blur.patch 進(jìn)行打補(bǔ)丁,這個(gè)就類(lèi)似于cherry-pick了
當(dāng)然也可能產(chǎn)生沖突 沖突信息類(lèi)似下面這樣
正應(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)您解決了此問(wèn)題后,執(zhí)行 "git am --continue"。 如果您想跳過(guò)此補(bǔ)丁,則執(zhí)行 "git am --skip"。 要恢復(fù)原分支并停止打補(bǔ)丁,執(zhí)行 "git am --abort"。
正應(yīng)用:130-sync: disable Blur
error: 打補(bǔ)丁失?。簊rc/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)您解決了此問(wèn)題后,執(zhí)行 "git am --continue"。
如果您想跳過(guò)此補(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,然后就可以通過(guò)git apply --reject進(jìn)行打補(bǔ)丁,
解決沖突后,執(zhí)行g(shù)it am --continue,帶有提交信息的補(bǔ)丁就打好了,可以直接提交了