查看差異文件
要導(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é)果截圖:
顯然,改指令是可以列出兩次提交的具體結(jié)果,但是我們只需要那些文件發(fā)生改動(dòng),并不需要如此具體到行的結(jié)果。
經(jīng)過(guò)查閱相關(guān)資料,發(fā)現(xiàn)
--name-only
參數(shù)可以使得git diff
的結(jié)果非常簡(jiǎn)練。打包
仔細(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
表示上上次提交,以此類推。
-
關(guān)于Git中的HEAD定義,《Git版本控制管理中》是這樣描述的:「HEAD始終指向當(dāng)前分支的最近提交。當(dāng)切換分支時(shí),HEAD會(huì)更新為指向新分支的最新提交」。 ?