• 正文
    • diff 和 patch
    • git diff
    • git diff 與 patch 使用實(shí)例
    • 結(jié)語(yǔ)
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

git diff 生成patch合入代碼

02/13 10:18
350
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
我們合并別人的代碼時(shí)候有些都在服務(wù)器可以使用cherry-pick 、merge、rebase等,但有時(shí)候有些修改是本地的,有些做了單獨(dú)commit,可以使用git format需要做一個(gè)patch文件,但是有些時(shí)候有些修改是臨時(shí)的,沒(méi)有提交,這個(gè)時(shí)候我們也可以用git diff命令進(jìn)行生成patch文件,然后使用patch命令合入,下面就給大家做一個(gè)分享。

歡迎關(guān)注微信公眾號(hào):羽林君,或者添加作者個(gè)人微信:become_me

diff 和 patch

我們經(jīng)常會(huì)使用diff和patch兩個(gè)組合命令生成patch文件,然后進(jìn)行合入。一般使用如下:生成patch文件,patch打入

?diff?-Nur?src?src_new?>src.patch?
?
?patch?-p[n]?<?src.patch

這個(gè)比較多使用,文章也比較多,這里不多贅述。

git diff

今天描述的是git diff配合patch,下面是git diff的詳細(xì)介紹:

參數(shù) 描述
git diff 查看尚未暫存的文件更新了哪些部分,此命令比較的是工作目錄(Working tree)和暫存區(qū)域快照(index)之間的差異。也就是修改之后還沒(méi)有暫存起來(lái)的變化內(nèi)容。
git diff --cached 查看已經(jīng)暫存起來(lái)的文件(staged)和上次提交時(shí)的快照之間(HEAD)的差異。顯示的是下一次 commit 時(shí)會(huì)提交到 HEAD 的內(nèi)容(不帶 -a 情況下)
git diff HEAD 顯示工作版本(Working tree)和 HEAD 的差別
git diff filename 查看尚未暫存的某個(gè)文件的更新
git diff –cached filename 查看已經(jīng)暫存起來(lái)的某個(gè)文件和上次提交的版本之間的差異
git diff sha1:filename sha2:filename 查看版本 sha1 的文件 filename 和版本 sha2 的文件 filename 的差異
git diff topic master 直接將兩個(gè)分支上最新的提交做比較
git diff topic…master 輸出自 topic 和 master 分別開發(fā)以來(lái),master 分支上的 changed
git diff --stat 查看簡(jiǎn)單的 diff 結(jié)果,可以加上 --stat 參數(shù)
git diff test 顯示當(dāng)前目錄和另一個(gè)叫 test 分支的差別
git diff HEAD – ./lib 顯示當(dāng)前目錄下的 lib 目錄和上次提交之間的差別
git diff HEAD^ HEAD 比較上次提交 commit 和上上次提交
git diff SHA1 SHA2 比較兩個(gè)歷史版本之間的差異

git diff 與 patch 使用實(shí)例

以下是一個(gè)暫未提交的修改,通過(guò) git status可以查看

我們可以通過(guò) 這個(gè)git diff,先查看對(duì)比信息

之后使用基本命令生成patch git diff > test.patch

patch命令 打補(bǔ)丁

直接打補(bǔ)丁 patch -p1 < test.patch

也可以到下層目錄,使用p2進(jìn)行打補(bǔ)丁 patch -p2 < test.patch

patch -p[n] < test.patch 其中n為層級(jí),層級(jí)的詳細(xì)解釋:

假如補(bǔ)丁頭是

>?---?src/a/b/c/d/file?????
>?+++?src_new/a/b/c/d/file
使用p0 表示在當(dāng)前目錄下查找src/a/b/c/d/file
使用p1 表示在當(dāng)前目錄下查找a/b/c/d/file
使用p2 表示在當(dāng)前目錄下查找b/c/d/file
使用p3 表示在當(dāng)前目錄下查找c/d/file
使用p4 表示在當(dāng)前目錄下查找d/file
使用p5 表示在當(dāng)前目錄下查找file
不使用pn表示忽略所有斜杠,在當(dāng)前目錄下查找file

git apply 打補(bǔ)丁

除了patch命令,我們也可以使用git apply,這里因?yàn)闆](méi)有commit信息所以不能用 git am,使用應(yīng)用補(bǔ)丁之前我們可以先檢驗(yàn)一下補(bǔ)丁能否應(yīng)用,git apply --check patch 如果沒(méi)有任何輸出,那么表示可以順利接受這個(gè)補(bǔ)丁

git?apply?--stat?test.patch

git?apply?--check?test.patch

git apply --check 沒(méi)有提示信息,表示正常,直接進(jìn)行打入補(bǔ)丁 git apply test.patch

因?yàn)闆](méi)有提交信息 所以git am無(wú)法使用

結(jié)語(yǔ)

這就是我自己的一些git diff打patch使用分享。如果大家有更好的想法和需求,也歡迎大家加我好友交流分享哈。


作者:良知猶存,白天努力工作,晚上原創(chuàng)公號(hào)號(hào)主。公眾號(hào)內(nèi)容除了技術(shù)還有些人生感悟,一個(gè)認(rèn)真輸出內(nèi)容的職場(chǎng)老司機(jī),也是一個(gè)技術(shù)之外豐富生活的人,攝影、音樂(lè) and 籃球。關(guān)注我,與我一起同行。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

一個(gè)程序員,喜歡寫文章,還喜歡打籃球,也喜歡吉他鋼琴的駁雜之人。日常更新自己,分享包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時(shí),公眾號(hào)內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!