git am, git apply, git format-patch,git diff 用法

傳統(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ǔ)丁就打好了,可以直接提交了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前提: 生成patch:git format-patch -M master生成指定patch,0163bed3b...
    yotods閱讀 106,083評(píng)論 5 21
  • github是一個(gè)基于git的代碼托管平臺(tái),付費(fèi)用戶(hù)可以建私人倉(cāng)庫(kù),我們一般的免費(fèi)用戶(hù)只能使用公共倉(cāng)庫(kù),也就是代碼...
    Lee堅(jiān)武閱讀 1,538評(píng)論 0 51
  • 查看、添加、提交、刪除、找回,重置修改文件 git help # 顯示command的help git show...
    lhx很好閱讀 278評(píng)論 0 1
  • 滿(mǎn)城勁颯披金甲, 落雨琵琶散閑人。 羽衣灑灑化干戈, 謐荷蕭蕭映蓬窗。 ???
    音驪繪閱讀 351評(píng)論 0 0
  • 透明小姐很苦惱,人多的場(chǎng)合自己總是說(shuō)不上話(huà),就算說(shuō)了別人也聽(tīng)不進(jìn)去,相當(dāng)于沒(méi)說(shuō),看到談笑風(fēng)生的別人,透明小姐焦慮萬(wàn)...
    趙三多閱讀 293評(píng)論 1 2

友情鏈接更多精彩內(nèi)容