查看差異文件
要導(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盤目錄答恶,確實(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)前和上次提交的差異就可以寫成這樣git diff --name-only HEAD^ HEAD
。其中可以省略后面的HEAD
囤攀,因?yàn)橹噶顣?huì)默認(rèn)拿HEAD^
和當(dāng)前提交作比對(duì)软免;
還有一種寫法:HEAD~0
表示當(dāng)前提交,HEAD~1
表示上一次提交焚挠,HEAD~2
表示上上次提交膏萧,以此類推。
-
關(guān)于Git中的HEAD定義蝌衔,《Git版本控制管理中》是這樣描述的:「HEAD始終指向當(dāng)前分支的最近提交榛泛。當(dāng)切換分支時(shí),HEAD會(huì)更新為指向新分支的最新提交」噩斟。 ?