@[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ù)值:
- %H:提交對象(commit)的完整哈希字串
- %h:提交對象的簡短哈希字串
- %T:樹對象(tree)的完整哈希字串
- %t:樹對象的簡短哈希字串
- %P:父對象(parent)的完整哈希字串
- %p:父對象的簡短哈希字串
- %an:作者(author)的名字
- %ae:作者的電子郵件地址
- %ad:作者修訂日期(可以用 -date= 選項定制格式)
- %ar:作者修訂日期,按多久以前的方式顯示
- %cn:提交者(committer)的名字
- %ce:提交者的電子郵件地址
- %cd:提交日期
- %cr:提交日期,按多久以前的方式顯示
- %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ù)某些條件來查找日志。用到的命令有
- 查看所有分支的所有操作
git reflog
- 查看當前分支的提交
git log
- 查看的提交的信息較為詳細
git log -p
- 查看的提交擁有統(tǒng)計信息
git log --stat
- 單行展示
git log --pretty=oneline
- 格式化輸出
git log --pretty=format
- 按照日期查找提交記錄
git log --before/after
- 查找提交信息模糊匹配對應信息的提交
git log --grep
- 查找對應作者的提交
git log --author
- 查找被提交文件中擁有指定內容的提交
git log -S
至此,本文結束。我是陳冰安,一個Java學習者。歡迎關注我的公眾號【暗星涌動】,愿與你一同進步。