Git比對檔案之間的差異

admin發表於2018-08-06

Git功能眾多,其中一個重要功能是可以比對檔案之間的差異。

舉一個常見的例子,如果程式碼被惡意掛碼,如果被掛碼檔案較大,想找到掛碼的地方可能要費一點周折,利用Git的比對功能,則可以非常輕鬆的找出檔案被掛碼的位置。git diff命令可實現我們的需求。

一.比較暫存區與工作區之間的差異:

暫存區兩個檔案的內容如下:

[HTML] 純文字檢視 複製程式碼
螞蟻部落一

以上是readme.txt檔案內容。

[HTML] 純文字檢視 複製程式碼
antzone

以上是antzone.txt檔案內容。

現在工作區對這兩個檔案分別增加了一行,比對程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git diff

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/06/014948zthmclimzmch4teh.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

預設狀態下,就是比較暫存區與工作區之間的差別。

關於比對的格式可以參閱git diff 輸出格式詳解一章節。比對指定檔案之間的差異,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git diff readme.txt

上面程式碼僅僅比對暫存區和工作區中readme.txt檔案的差異,程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/06/015043oir4f8bjf4npqiia.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

二.比對指定commit與工作區的檔案:

比對分支檔案與工作區檔案的差異,其實與比對commit提交中的檔案與工作區檔案差異是一回事,因為分支就是指向某個commit提交的。首先看一下當前提交歷史記錄,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git log --oneline

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/06/015127wlrca6r1y6xrze11.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

下面檢視一下最後一次提交與工作區檔案之間的差異,程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git diff f2303a6 readme.txt

以上程式碼可以比對f2303a6提交中指定檔案與工作區對應檔案的差異。

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/06/015205w5m3z4o3b4m3p1mm.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

三.比對暫存區與指定提交差異:

前面都是與工作區進行比對,下面介紹一下指定commit提交與暫存區的比對。

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git diff --cached readme.txt

預設是比對暫存區和最新提交的指定檔案。

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/06/015252mq29bm450qtl0lu7.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

當然我們可以比對指定提交與暫存區檔案差異,程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git diff --cached f2303a6 readme.txt

以上程式碼可以比對f2303a6提交下readme.txt檔案與暫存區下對應檔案的差異。

相關文章