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

git diff 生成patch合入代碼

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

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

diff 和 patch

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

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

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

git diff

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

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

git diff 與 patch 使用實例

以下是一個暫未提交的修改,通過 git status可以查看

我們可以通過 這個git diff,先查看對比信息

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

patch命令 打補丁

直接打補丁 patch -p1 < test.patch

也可以到下層目錄,使用p2進行打補丁 patch -p2 < test.patch

patch -p[n] < test.patch 其中n為層級,層級的詳細解釋:

假如補丁頭是

>?---?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 打補丁

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

git?apply?--stat?test.patch

git?apply?--check?test.patch

git apply --check 沒有提示信息,表示正常,直接進行打入補丁 git apply test.patch

因為沒有提交信息 所以git am無法使用

結(jié)語

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


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

相關(guān)推薦

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

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