Git 導(dǎo)出某兩次提交之間的差異文件

查看差異文件

要導(dǎo)出Git倉(cāng)庫(kù)中某兩次提交之間的文件差異,必須要先知道有哪些文件發(fā)生了差異。git diff指令能很方便的協(xié)助我們完成這樣的操作。
本次課題中所使用到的git diff指令的用法是git diff COMMIT_ID_1 COMMIT_DI_2,其中的COMMIT_ID_X就是通過(guò)git log指令查看到的提交ID。一般情況下,commit_id取前六位就可以了。
以下就是我隨便在一個(gè)倉(cāng)庫(kù)執(zhí)行以上指令的結(jié)果截圖:

git diff 指令執(zhí)行結(jié)果

顯然,改指令是可以列出兩次提交的具體結(jié)果,但是我們只需要那些文件發(fā)生改動(dòng),并不需要如此具體到行的結(jié)果。
經(jīng)過(guò)查閱相關(guān)資料,發(fā)現(xiàn)--name-only參數(shù)可以使得git diff的結(jié)果非常簡(jiǎn)練。
git diff --name-only執(zhí)行結(jié)果

打包

仔細(xì)觀察git diff --name-only指令的執(zhí)行結(jié)果,這不正是這些文件在根目錄中的相對(duì)地址嘛?結(jié)合xargs指令可以非常快速地將差異文件給打包了。我比較習(xí)慣用tar指令進(jìn)行壓縮。
本次執(zhí)行的指令如下

git diff --name-only 7f1caef cc011f5 | xargs tar -zcvf /d/a.tar.gz

查看D盤(pán)目錄,確實(shí)生成了a.tar.gz文件,里面的目錄結(jié)構(gòu)和項(xiàng)目的結(jié)構(gòu)保持一致,并且只包含差異文件,如下圖所示。

生成的差異文件壓縮包

注意點(diǎn)

  • 執(zhí)行本打包指令的時(shí)候,一定要在項(xiàng)目的根目錄中執(zhí)行,以為不論是在項(xiàng)目目錄中的哪個(gè)位置,git diff指令輸出的文件路徑都是相對(duì)于項(xiàng)目根目錄的,在非項(xiàng)目根目錄下執(zhí)行xargs tar的時(shí)候會(huì)提示找不到文件;
  • xargs tar指令所打包的文件和當(dāng)前所在的分支有關(guān)。如本次例子中,當(dāng)前所在分支為master分支的最新提交,那么打包輸出的文件版本就是master分支的最新提交版本;

快捷用法

以上的COMMIT_ID_X其實(shí)可以用HEAD[1]來(lái)代替,比如HEAD表示當(dāng)前提交,HEAD^表示上一次提交,HEAD^^表示上上次提交,所以我們輸出當(dāng)前和上次提交的差異就可以寫(xiě)成這樣git diff --name-only HEAD^ HEAD。其中可以省略后面的HEAD,因?yàn)橹噶顣?huì)默認(rèn)拿HEAD^和當(dāng)前提交作比對(duì);
還有一種寫(xiě)法:HEAD~0表示當(dāng)前提交,HEAD~1表示上一次提交,HEAD~2表示上上次提交,以此類推。


  1. 關(guān)于Git中的HEAD定義,《Git版本控制管理中》是這樣描述的:「HEAD始終指向當(dāng)前分支的最近提交。當(dāng)切換分支時(shí),HEAD會(huì)更新為指向新分支的最新提交」。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容