Git 系列 3:如何使用日志命令助力你的工作?

@[TOC]

一、引言

在本系列的第一篇文章Git 系列 1:提交修改到遠程倉庫——詳盡版的【八、查看提交記錄】中,我們提到了關于查看日志的知識,今天,我們再來詳細的了解以下日志查看的相關命令。

二、查看日志

2.1 查看所有記錄

2.1.1 顯示所有提交過的版本信息

通過 git log 命令可以查看至今為止的所有的提交記錄。

git log

運行結果如下:


在這里插入圖片描述

可以看到,界面中顯示了不少的commit 記錄。以第一條記錄為例,每個commit 記錄都包含了sha-1 值,作者(Author ),修改日期(Date ),提交信息(add C )等信息。
輸入此命令時,命令行界面只列舉了最近的幾次提交,而并不會一次性將所有的commit 記錄都列舉出來。
操作方法:

  • 若你打算查看更之前的記錄,只需要按下方向鍵【 ↓ 】或者字母鍵【 J 】,命令行界面就會向下移動一行。
  • 若你已經(jīng)將日志移動到較后的位置,想查看最近的commit 記錄,只需要按下方向鍵【 ↑ 】或者字母鍵【 K 】,命令行界面就會向上移動一行。
  • 若你想關閉日志查看,只需要按下字母鍵【 q 】,就可以退出日志界面。

2.1.2 查看所有分支的所有操作記錄

通過命令 git reflog 可以查看項目中所有分支的所有操作記錄(包括已經(jīng)被刪除的 commit 記錄和 reset 的操作)。

git reflog 

運行結果如下:


在這里插入圖片描述

可以看到,界面中顯示了不少操作記錄。以第一條記錄為例,每條記錄都包含了sha-1 值,標識( (newB )HEAD{1} ),操作(merge ),提交信息(Merge made by .. )等信息。

2.1.3 log 與reflog 比較

同:

  • git reflog與git log用法大致相同,在git log上適用的參數(shù)在git reflog基本也是適用的。

異:

  • reflog 是Git 操作的一道安全保障,它能夠記錄幾乎所有本地倉庫的改變。包括所有分支commit 提交,已經(jīng)刪除(其實并未被實際刪除)commit 都會被記錄。簡單地說,只要HEAD 發(fā)生變化,就可以通過reflog 查看到。而log 只能查看提交的版本信息。
  • reflog 的查詢范圍是所有分支的所有操作,而log 的查詢范圍是當前分支的提交記錄。

2.1.4 查看詳細的提交記錄

通過 git log -p 命令可以查看更為詳細的提交記錄。

 git log -p

運行結果如下:


在這里插入圖片描述

可以看到,與前兩個命令相比,這次的輸出多了每次提交記錄的文件變化等信息。

2.1.5 查看每次提交的簡略統(tǒng)計信息

通過 git log --stat 命令可以查看每次提交的簡略統(tǒng)計信息。

 git log --stat

運行結果如下:


在這里插入圖片描述

可以看到,與git log -p 命令相比,此次的命令輸出結果更為直觀,并且增加了統(tǒng)計信息。

2.2 查看部分記錄

2.2.1 查看最近幾條記錄

通過 git log -p -n 命令可以支查看最近的幾條提交記錄。
例如,我想只查看最近的兩次提交,只需要輸入以下命令:

git log -p -2

運行結果如下:
在這里插入圖片描述

可以看到,界面中只輸出了最近的兩次提交。

2.2.2 指定文件名

通過gti log fileName 可以只查看與指定文件相關的提交記錄。
例如,我想只查看關于C.txt 的提交記錄,只需要輸入以下命令:

git log C.txt

運行結果如下:


在這里插入圖片描述

可以看到,界面中輸出的都是與C.txt 相關的提交。
同理,我們也可以只查看與指定目錄相關的提交記錄。而這,只需要將文件名改為目錄名即可。

git log AA/

2.2.3 指定標簽之前

通過git log tagName 命令可以查看在打標簽位置之前的提交記錄。
例如,我想查看標簽show 前面的提交記錄,只需要輸入以下命令:

git log show

運行結果如下:

在這里插入圖片描述

可以看到,界面中只輸出了標簽show 及其之前的提交記錄。

2.2.4 指定分支

通過 git log branch1..branch2 可以查看branch2 分支歷史提交記錄,但是不包含branch1 分支歷史記錄。
例如,我想查看master 分支的提交記錄,不想查看xi 分支的提交記錄,只需要輸入以下命令

git log xi..master

運行結果如下:


在這里插入圖片描述

通過 git log branch1...branch2 可以查看branch2 和branch1 的分支歷史記錄。
例如,我想查看master 和xi 分支的提交記錄,只需要輸入以下命令:

git log xi...master

運行結果如下:


在這里插入圖片描述

可以看到,這次的輸出比上次多了提交信息為 add r 的提交,這是xi 分支上的提交記錄。

2.2.5 指定commit

通過 git log commit 可以查看指定提交之前的提交記錄。
例如,我想查看提交d0aba9 之前的提交記錄,只需要輸入以下命令:

git log d0aba9 

運行結果如下:


在這里插入圖片描述

可以看到,在d0aba9 之后的提交并沒有被輸出。
通過 git log commit...commit2 可以查看commit1 與commit2之 間的歷史提交記錄(不包含commit2 )。
例如,我想查看提交d0aba9 和56ce24 之間的提交記錄,只需要輸入以下命令:

git log d0aba9...56ce24

運行結果如下:


在這里插入圖片描述

可以看到,界面中只輸出了d0aba9 和le569a 的提交記錄,并沒有56ce24 的提交記錄。

2.3 形象化輸出

通過 git log --graph 命令可以更加形象的展示項目的分支,提交歷史。

git log --graph

這里,借用別人的圖片作為展示:


在這里插入圖片描述

可以看到,輸出中增加了一些 ASCII 字符串來形象地展示項目的分支、合并歷史。

2.4 格式化輸出

2.4.1 單行展示

通過git log --pretty=oneline 命令可以將每個提交放在一行顯示,在瀏覽大量的提交時非常有用。

git log --pretty=oneline

運行結果如下:


在這里插入圖片描述

可以看到,每個提交都只有一行的空間進行展示了。
另外,還有 short,full ,fuller,medium 等 選項,它們展示信息的格式基本一致,但是詳盡程度不一:


在這里插入圖片描述

2.4.2 自定義格式

通過 git log --pretty=format 命令可以自定義輸出格式。

git log --pretty=format:'%h was %an, %ar, message: %s'

運行結果如下:


在這里插入圖片描述

format參數(shù)值:

  1. %H:提交對象(commit)的完整哈希字串
  2. %h:提交對象的簡短哈希字串
  3. %T:樹對象(tree)的完整哈希字串
  4. %t:樹對象的簡短哈希字串
  5. %P:父對象(parent)的完整哈希字串
  6. %p:父對象的簡短哈希字串
  7. %an:作者(author)的名字
  8. %ae:作者的電子郵件地址
  9. %ad:作者修訂日期(可以用 -date= 選項定制格式)
  10. %ar:作者修訂日期,按多久以前的方式顯示
  11. %cn:提交者(committer)的名字
  12. %ce:提交者的電子郵件地址
  13. %cd:提交日期
  14. %cr:提交日期,按多久以前的方式顯示
  15. %s:提交說明

2.4.3 排序輸出

通過git log --date-order 命令可以使提交記錄按時間順序輸出。

git log --pretty=format:'%h : %cd : %s' --date-order 

運行結果如下:


在這里插入圖片描述

通過git log --topo-order 命令可以使提交記錄按拓樸順序輸出。

`git log --pretty=format:'%h : %cd : %s' --topo-order

2.5 按照日期查看提交記錄

2.5.1 指定時間之前

通過git log --before 命令可以查看在指定日期之前(包含該日期 )的提交記錄。
例如,我想查看不是今天(20200507)提交的記錄,只需要輸入以下命令:

git log --before="20120-5-6" --pretty=format:'%h : %cd : %s'

運行結果如下:


在這里插入圖片描述

可以看到,輸出中,并沒有今天的提交記錄。
至于為什么沒有昨天的提交記錄,明明昨天有做提交???那是因為git log 命令只查詢當前分支的記錄。昨天是在master 分支上進行操作,而今天我們主要是在 xi 分支上進行操作( 前面有一步運行前我切換分支了 )。
另外,我們也可以用--until 代替--before ,兩者功能是一樣的。

2.5.2 指定時間之后

通過git log --after 命令可以查看在指定日期之后(包含該日期 )的提交記錄。
例如,我想查看今年4月30號之后的提交記錄,只需要輸入以下命令:

git log --after="20120-4-30" --pretty=format:'%h : %cd : %s'

運行結果如下:


在這里插入圖片描述

可以看到,輸出中只有4月30號及之后的提交記錄。
另外,我們也可以用--since 代替--after,兩者功能是一樣的。

2.6 按照提交信息查看提交記錄

通過git log --grep 命令可以查看模糊匹配指定提交信息的提交記錄。
例如,我想查找提交信息中包含" add "的提交記錄,只需要輸入以下命令:

git log --pretty=oneline --grep="add" 

運行結果如下:


在這里插入圖片描述

可以看到,在輸出中,每條記錄的提交信息都包含 add 字符串。

2.7 按照作者或郵箱查看提交記錄

通過git log --author 命令可以查看指定作者的提交記錄。
例如,我想查看作者為anxinghei 的提交記錄,只需要輸入以下命令:

git log --pretty=oneline --author="anxinghei"

運行結果如下:

在這里插入圖片描述

特別說明:如果同時使用--grep 和--author 篩選,需要附加--all-match 參數(shù)。

2.8 按照文件內容查看提交記錄

通過 git log -S 命令可以查看內容中含有指定信息的文件所在的提交。
例如,我想查找內容包含“A ”的文件所在的提交記錄,只需要輸入以下命令:

git log -S "A"

運行結果如下:


在這里插入圖片描述

如果想使用正則表達式去匹配而不是字符串,那么你可以使用-G 代替-S 。

三、總結

總結:今天,我們主要學習了如何根據(jù)某些條件來查找日志。用到的命令有

  1. 查看所有分支的所有操作
git reflog 
  1. 查看當前分支的提交
git log
  1. 查看的提交的信息較為詳細
git log -p 
  1. 查看的提交擁有統(tǒng)計信息
git log --stat
  1. 單行展示
git log --pretty=oneline 
  1. 格式化輸出
git log --pretty=format 
  1. 按照日期查找提交記錄
git log --before/after
  1. 查找提交信息模糊匹配對應信息的提交
git log --grep 
  1. 查找對應作者的提交
git log --author 
  1. 查找被提交文件中擁有指定內容的提交
git log -S 

至此,本文結束。我是陳冰安,一個Java學習者。歡迎關注我的公眾號【暗星涌動】,愿與你一同進步。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容