Git新手教程-檢視倉庫的歷史記錄(四)

AndyJennifer發表於2019-10-11

前言

在前面的文章中,我們學習瞭如何建立倉庫。現在我們將學習如何檢視倉庫的歷史記錄,之所以沒有先講解如何向倉庫如何提交commit,是因為我覺得,只有先了解歷史記錄中包含哪些資訊後,我們才能更好的建立良好的提交。有了良好的提交,才會有助於以後我們對專案的整體回顧。在本文章中,我們將介紹 git loggit 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展示介面.png

歷史記錄分析

預設情況下,使用 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展示.png

使用 git log --oneline 命令會:

  • 每行顯示一個 commit
  • 顯示 commit 的 SHA 的前 7 個字元
  • 顯示 commit 的訊息

檢視修改後的檔案

在瞭解了 git log --oneline 命令後,我們可能會想深入瞭解某個commit更改了哪個或哪些檔案。這個時候我們需要 git log 的另一個選項 --stat

stat 是單詞 statistics ,為統計的意思。

使用 git log --stat 命令,我們能得到如下輸出:

這裡為了方便講解,我只擷取了特徵明顯的commit

git-log--stat展示.png

上圖中最後一行,表明這次提交共涉及到8個檔案的修改,160行的插入,5行的刪除。其中build.gradle檔案中刪除了1行,UserPreferences.kt中新增或刪除了2行......相信到這裡大家就明白了,使用命令git log --stat會:

  • 顯示被修改的檔案
  • 顯示新增/刪除的行數
  • 顯示一個摘要,其中包含修改/刪除的總檔案數和總行數

檢視檔案更改

在上文中,我麼已經通過新增 --stat 選項,可以知道修改了哪些檔案,以及新增/刪除了多少行程式碼。如果能檢視檔案中到底進行了哪些更改,是不是更好呢?在 git log 命令中具有一個可用來顯示對檔案作出實際更改的選項,就是 --patch ,可以簡寫為 -p

例如,我們想檢視下圖中具體的修改:

git-log-p1.png

我們使用 git log -p 命令,我們能夠得到一下輸出:

git-log-p2.jpg

在上述輸出資訊中,包含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中支援完整的 SHASHA前七個字元 作為具體的查詢條件。

需要注意的是使用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,我們能得到如下介面:

studioLog介面顯示.jpg

現在分別上圖示註的內容進行介紹:

  1. 提交記錄展示列表:在該區域顯示了我們所有的提交內容,包含commit資訊、作者、日期。
  2. 搜尋框:我們能根據關鍵字搜尋到我們想要查詢的提交資訊。
  3. User篩選框:我們可以篩選其他作者的提交資訊
  4. Date篩選框:根據日期來查詢提交資訊。
  5. 通過點選相關提交記錄,我們能檢視對應提交對檔案的操作(增加,刪除,更改),如果點選相關檔案,可以檢視當前提交內容與上個版本的區別。
  6. 通過點選相關提交記錄,我們能檢視到詳細的提交資訊,包括SHA值,提交使用者,郵件等其他資訊。

最後

站在巨人的肩膀上,才能看的更遠~

相關文章