git log提交歷史詳解

admin發表於2018-07-17

隨著專案的推進,會積累若干提交,如果瞭解每次提交相關資訊,僅靠人腦記憶不可靠,也不可能。

使用git log命令可以檢視提交歷史,程式碼如下:

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

執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201807/17/094002bucvvk6p4fp3f3vs.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

git log指令不加其他引數,可以列出所有歷史提交,分析如下:

(1).按照提交的時間順序排列,上層的是更新的提交。

(2).commit後面是經過SHA-1加密演算法對此次提交計算的結果,可以唯一標識此次提交(重複的可能性可以忽略不計)。

(3).Author後面分別是提交的使用者名稱和電子郵件地址,它們之間用空格分隔。

(4).Date後面是提交的時間日期。

(5).Date垂直的下方中間以空格分隔的是提交資訊說明。

特別說明:如果提交歷史較多,可能顯示不完全,具體參閱git log提交歷史顯示不完全一章節。

git log指令的引數眾多,相應的列印結果也會有所不同,下面介紹一下常用的引數。

一.檢視最近的n此提交:

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

顯示最近三次提交。

二.檢視指定檔名的提交歷史記錄:

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

檢視readme.txt檔案的歷史提交記錄,如果多個檔案,以空格分隔。

三.檢視指定目錄下檔案提交歷史記錄:

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

檢視dir目錄下所有檔案的歷史提交記錄。

四.檢視指定分支或者標籤歷史提交記錄:

[Shell] 純文字檢視 複製程式碼
$ git log v2.0..

檢視標籤標籤v2.0之後的歷史提交記錄(不包含v2.0)。

[Shell] 純文字檢視 複製程式碼
$ git log ant..master

檢視master分支歷史提交記錄,但是不包含ant分支歷史記錄。

[Shell] 純文字檢視 複製程式碼
$ git log master..ant

檢視ant分支歷史提交記錄,但是不包含master分支歷史記錄。

[Shell] 純文字檢視 複製程式碼
$ git log master...ant

檢視master分支或者ant分支的歷史提交記錄。

五.查詢commit提交歷史提交記錄:

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

檢視commit之前的歷史提交記錄(包含commit自身)。

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

檢視commit1與commit2之間的歷史提交記錄(包括兩者)。

[Shell] 純文字檢視 複製程式碼
$ git log commit1..commit2

檢視commit1與commit2之間的歷史提交記錄(不包括commit1)。

六.--pretty引數:

通過不同的引數值以不同的格式顯示歷史提交記錄。

可以有的引數值如下:

(1).oneline。

(2).short。

(3).medium(預設值)。

(4).full。

(5).fuller。

(6).email。

(7).raw。

(8).format(此引數比較複雜後面會單獨介紹)。

比較常用的引數如oneline,日誌資訊將會在一行顯示:

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

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

a:3:{s:3:\"pic\";s:43:\"portal/201807/17/094515z26hfhdtwctair6z.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

其他引數值就不一一演示了,感興趣的可以自行測試。

七.format引數值:

(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:提交說明。

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git log --pretty=format:"%an %ae"

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

a:3:{s:3:\"pic\";s:43:\"portal/201807/17/094603ck1vwjqccij11jyp.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

八.按照日期檢視提交歷史記錄:

(1).--after=:

[Shell] 純文字檢視 複製程式碼
git log --after="2018-7-10”

顯示2018-7-10之後的commit(包含7月10號)。

日期還可以是相對日期,比如"1 week ago"和”yesterday"。

與--since功能相同。

(2).--before=:

[Shell] 純文字檢視 複製程式碼
git log --before="2018-7-10”

顯示2018-7-10之前的commit(包含7月10號)。

與--until功能相同。

九.按照作者和郵箱檢視提交歷史記錄:

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git log --author="antzone"

上面會展示作者為"antzone"的歷史提交記錄。

特別說明:

(1).作者名不需要精確匹配,只需要包含即可。

(2).使用正則,例如git log --author="antozne\|softwhy”,搜尋antozne和softwhy提交的歷史記錄。

(3).--author不但可以搜尋作者,也可以搜尋郵箱。

十.按照提交描述資訊檢視歷史提交記錄:

首先看一段程式碼例項:

[Shell] 純文字檢視 複製程式碼
$ git commit -m "新增一行刪除程式碼"

提交描述資訊就是-m後面規定的字串。

[Shell] 純文字檢視 複製程式碼
$ git log --pretty=oneline --grep="add"

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

a:3:{s:3:\"pic\";s:43:\"portal/201807/17/094841scjfjbiqs4sb6sbj.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

預設是區分大小寫的,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git log --pretty=oneline --grep="Add"

將不會查詢到前面程式碼所查詢到的提交歷史記錄,程式碼修改如下:

[Shell] 純文字檢視 複製程式碼
$ git log --pretty=oneline --grep="Add" -i

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

a:3:{s:3:\"pic\";s:43:\"portal/201807/17/095016cp0jo0kykkp8e106.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

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

十一.按照提交內容檢視歷史提交記錄:

實際應用中,可能需要查詢新增或者刪除指定的程式碼,使用-S"<string>"、-G"<string>"即可。

程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git log -S"螞蟻部落"

可以篩選內容中含有"螞蟻部落"檔案所在的提交。

如果想使用正規表示式去匹配而不是字串, 那麼你可以使用-G代替-S。

特別說明:-S和-G之後沒有等號(=)。

十二.其他引數:

(1).-p :檢視提交時的補丁資訊。

(2).--stat :列出檔案的修改行數。

(3).--sortstat:只顯示--stat中最後行數修改新增移除的統計。

(4).--graph:以簡單的圖形方式列出提交記錄。

(5).--abbrev-commit:僅顯示 SHA-1 的前幾個字元,而非所有的 40 個字元。

(6).--relative-date:使用較短的相對時間顯示("1 weeks ago")。

(7).--name-only:僅在提交資訊後顯示已修改的檔案清單。

(8).--name-status:顯示新增、修改、刪除的檔案清單。

相關文章