前言
在前面的文章中,我們學習瞭如何建立倉庫。現在我們將學習如何檢視倉庫的歷史記錄,之所以沒有先講解如何向倉庫如何提交commit,是因為我覺得,只有先了解歷史記錄中包含哪些資訊後,我們才能更好的建立良好的提交。有了良好的提交,才會有助於以後我們對專案的整體回顧。在本文章中,我們將介紹 git log
和 git show
兩個指令,這裡先簡單介紹一下這兩個命令的功能。
- git log:檢視現有的提交資訊
- git show:可以顯示給定提交的資訊。
git log 命令
當然使用 git log
命令,我們首先需要一個現有的Git倉庫,這裡還是以我自己的專案SimpleEyes專案為例。
還記得我們之前的介紹的 git clone
命令嗎?我們先 clone 該專案吧.
git clone https://github.com/AndyJennifer/SimpleEyes
複製程式碼
克隆該專案後,我們通過 cd 命令進入該專案,使用 git log
命令,我們能得到下列輸出:
歷史記錄分析
預設情況下,使用 git log
命令會顯示倉庫中每個 commit 的詳細提交資訊。結合上圖,我們來分析下每行所代表的具體內容。這裡以第一個歷史提交記錄為例:
- commit頭資訊
commit 543019ea4bca77c31ccd1d06c4ca2ca4b1d69b23 (HEAD -> master, origin/master, origin/HEAD)
複製程式碼
在Git中會為每個提交生成一個ID,也就是SHA
。在本行中不僅顯示了提交的ID,當前所指向的分支為 master
,當然現在我們可能還不瞭解分支的相關資訊,不過請大家放心,我們會在後續的文章中學到它的。
SHA
是一個長 40 個字元的字串(由 0–9 和 a–f 組成),並根據 Git 中的檔案或目錄結構的內容計算得出。SHA 的全稱是"Secure Hash Algorithm"(安全雜湊演算法)。如果你想了解雜湊演算法,可以參考SHA家族。
- 作者
Author: AndyJennifer <1225868370@qq.com>
複製程式碼
當前行顯示了提交這個commit的作者以及對應郵件資訊。現階段這個倉庫只有我一個人維護,所以這裡全是我的相關資訊。當然,如果你的倉庫是多人協作開發,那麼不同的作者提交的commit所對應的Author也會不同啦。
- 日期
Date: Thu Aug 29 23:43:07 2019 +0800
複製程式碼
日期,很簡單,就是現實當前 commit 的時間,一般情況下,我們是不會關心它的。
- commit訊息
修改了切換視訊時,controller沒有設定,導致的空指標異常
複製程式碼
一般情況下,我們需要為每次提交的內容進行說明,比如增加了什麼功能,修改了什麼bug等等。一個良好的commit 提交內容與提交訊息之間應該有著一一對應的關係,而不是表述模糊,張冠李戴。
git log 命令列日誌瀏覽快捷鍵
如果你是第一次使用git log
命令,可能會有一個疑問,如何載入更多的歷史記錄呢?如何退出呢?如果大家仔細觀察,在我們的介面中末尾有個冒號:
,該冒號表明還可以顯示更多的輸出行。在Git中是使用 Less
程式作為其分頁器,如果你不熟悉 less 或分頁器也沒有問題。大家只要知道該分頁器是用於翻頁並瀏覽內容的就行了。下面我們看看該分頁器對應的按鍵指令。
要向下滾動:
j
或↓
一次向下移動一行d
按照一半的螢幕幅面移動f
按照整個螢幕幅面移動
要向上滾動:
k
或↑
一次向上移動一行u
按照一半的螢幕幅面移動b
按照整個螢幕幅面移動
需要注意的是,當冒號變為單詞END時,表示記錄顯示完畢,那麼我們可以按下 q
可以離開分頁器。
更改 git log 顯示資訊的方式
git log --oneline
使用 git log
命令,會顯示日期、作者、commit訊息等資訊,但是有些情況下,我們可能並不關心日期、或相關作者。我們只想快速的瀏覽具體的提交資訊,那麼我們可以為當前的 git log
命令,增加一個選項 --oneline
。
注意這裡是
oneline
而不是online
。
使用 git log --oneline
我們能得到如下輸出:
使用 git log --oneline
命令會:
- 每行顯示一個 commit
- 顯示 commit 的 SHA 的前 7 個字元
- 顯示 commit 的訊息
檢視修改後的檔案
在瞭解了 git log --oneline
命令後,我們可能會想深入瞭解某個commit更改了哪個或哪些檔案。這個時候我們需要 git log
的另一個選項 --stat
。
stat 是單詞
statistics
,為統計的意思。
使用 git log --stat
命令,我們能得到如下輸出:
這裡為了方便講解,我只擷取了特徵明顯的commit
上圖中最後一行,表明這次提交共涉及到8
個檔案的修改,160
行的插入,5
行的刪除。其中build.gradle檔案中刪除了1行,UserPreferences.kt中新增或刪除了2行......相信到這裡大家就明白了,使用命令git log --stat
會:
- 顯示被修改的檔案
- 顯示新增/刪除的行數
- 顯示一個摘要,其中包含修改/刪除的總檔案數和總行數
檢視檔案更改
在上文中,我麼已經通過新增 --stat
選項,可以知道修改了哪些檔案,以及新增/刪除了多少行程式碼。如果能檢視檔案中到底進行了哪些更改,是不是更好呢?在 git log
命令中具有一個可用來顯示對檔案作出實際更改的選項,就是 --patch
,可以簡寫為 -p
。
例如,我們想檢視下圖中具體的修改:
我們使用 git log -p
命令,我們能夠得到一下輸出:
在上述輸出資訊中,包含5個比較重要的資訊:
- 第一個:
diff
顯示了原始版本與新版本間的差異,我們現在看到的IjkVideoView.java
檔案,其中a
/app/../IjkVideoView.java為該檔案的第一個版本,b
/app/../IjkVideoView.java為新版本。 - 第二個:顯示了第一個版本檔案的雜湊值與檔案更改後的雜湊值,這些雜湊值和提交的
SHA
是不同的。 - 第三個:也是顯示了不同版本的檔案差異,其中
-
表示舊版本,+
表示新版本。 - 第四個:新增的行所在的位置以及新增了多少行。
-333,8
表示原始版本(用-
表示),從338行開始,顯示了8行。+333,10
表示新版本(用+
表示),從338行開始,現在變成了10行,這10行在命令視窗中顯示了。
- 第五個:表示了在commit中實際進行的更改。
- 用紅色並以 減號(
-
)開頭的行是位於檔案原始版本中,但是被 commit 刪除的行 - 用綠色標示並以 加號(
+
)開頭的行是 commit 新加的行
- 用紅色並以 減號(
檢視特定的commit
上文中涉及到的命令,是對全部的歷史記錄進行瀏覽,如果說能夠單獨的顯示某個提交資訊是不是很棒呢?在Git中有兩種方式來檢視特定的提交。
- 使用 git log 提供你要檢視的 commit 的 SHA
- 使用 git show
這裡我們先 git log 方式,然後再學習 git show。
使用 git log 方式
在上文中,我們已經學會如何使用以下命令輸出資訊:
- git log
- git log --oneline
- git log --stat
- git log -p
但是你是否知道,可以向所有這些命令提供 commit 的 SHA 作為最後一個引數?例如:
git log 543019ea
複製程式碼
在Git中支援完整的
SHA
與SHA前七個字元
作為具體的查詢條件。
需要注意的是使用git log
+ SHA
的這種方式,並不會單獨的顯示某個提交。而是命令列將從這條提交開始輸出歷史記錄,你仍然可以通過Git提供的分頁器,檢視該條提交資訊之後的記錄。
使用 git show 方式
使用 git show + SHA
的方式,可以顯示特定的提交資訊。如
git show 543019ea
複製程式碼
git show
預設情況下會顯示:
- commit頭資訊
- 作者
- 日期
- commit 訊息
- 具體的檔案差異
這裡就不再暫時示例圖片了,希望大家多多練習,並檢視最終效果吧。
IntelliJ IDEA or Android Sutdio 圖形化介面的使用
最後還是回到我們熟悉的圖形化介面的使用流程中。我們來看看IDEA為我們提供了哪些便利吧。
通過依次點選編譯器底部的Version Control
->Log
,我們能得到如下介面:
現在分別上圖示註的內容進行介紹:
- 提交記錄展示列表:在該區域顯示了我們所有的提交內容,包含commit資訊、作者、日期。
- 搜尋框:我們能根據關鍵字搜尋到我們想要查詢的提交資訊。
- User篩選框:我們可以篩選其他作者的提交資訊
- Date篩選框:根據日期來查詢提交資訊。
- 通過點選相關提交記錄,我們能檢視對應提交對檔案的操作(增加,刪除,更改),如果點選相關檔案,可以檢視當前提交內容與上個版本的區別。
- 通過點選相關提交記錄,我們能檢視到詳細的提交資訊,包括SHA值,提交使用者,郵件等其他資訊。
最後
站在巨人的肩膀上,才能看的更遠~