git log命令

git log命令用於顯示提交日誌信息。

使用語法

git log [<options>] [<revision range>] [[\--] <path>…]

描述

git log命令用於顯示提交日誌信息。

該命令採用適用於git rev-list命令的選項來控制顯示的內容以及如何以及適用於git diff- *命令的選項,以控制如何更改每個提交引入的內容。

示例

以下是一些示例 -

1.顯示整個提交歷史記錄,但跳過合併

$ git log --no-merges
commit c5f8a258babf5eec54edc794ff980d8340396592
Author: maxsu <[email protected]>
Date:   Wed Jul 12 22:07:59 2017 +0800

    commit a new file: newfile.txt
... ...

2.顯示自v2.6.12版以來所有提交更改include/scsidrivers/scsi子目錄中的任何文件的所有提交

$ git log master include/scsi drivers/scsi

3.顯示最近兩週的更改文件gitk。 「--」是必要的,以避免與名爲gitk的分支混淆

$ git log --since="2 weeks ago" -- gitk

4.顯示「test」分支中尚未在「release」分支中的提交,以及每個提交修改的路徑列表

$ git log --name-status release..test

5.顯示更改builtin/rev-list.c的提交,包括在文件被賦予其現有名稱之前發生的提交。

$ git log --follow builtin/rev-list.c

6.顯示在任何本地分支中的所有提交,但不包括任何遠程跟蹤分支機構的起始點(origin不具有)。

git log --branches --not --remotes=origin

7.顯示本地主服務器中的所有提交,但不顯示任何遠程存儲庫主分支。

git log master --not --remotes=*/master

8.顯示歷史,包括變化差異,但僅從「主分支」的角度來看,忽略來自合併分支的提交,並顯示合併引入的變化的完全差異。只有當遵守在一個整合分支上合併所有主題分支的嚴格策略時,這纔有意義。

git log -p -m --first-parent

9.顯示文件main.c中的函數main()隨着時間的推移而演變。

git log -L '/int main/',/^}/:main.c

10.將顯示最近三次的提交。

git log -3

11.根據提交ID查詢日誌

$ git log commit_id    #查詢ID(如:6bab70a08afdbf3f7faffaff9f5252a2e4e2d552)之前的記錄,包含commit
$ git log commit1_id commit2_id #查詢commit1與commit2之間的記錄,包括commit1和commit2
$ git log commit1_id..commit2_id #同上,但是不包括commit1

其中,commit_id可以是提交哈希值的簡寫模式,也可以使用HEAD代替。HEAD代表最後一次提交,HEAD^爲最後一個提交的父提交,等同於HEAD~1HEAD~2代表倒數第二次提交
--pretty按指定格式顯示日誌信息,可選項有:oneline,short,medium,full,fuller,email,raw以及format: ,默認爲medium,可以通過修改配置文件來指定默認的方式。

$ git log (--pretty=)oneline

常見的format選項:

#選項     #說明
%H      提交對象(commit)的完整哈希字串
%h      提交對象的簡短哈希字串
%T      樹對象(tree)的完整哈希字串
%t      樹對象的簡短哈希字串
%P      父對象(parent)的完整哈希字串
%p      父對象的簡短哈希字串
%an     作者(author)的名字
%ae     作者的電子郵件地址
%ad     作者修訂日期(可以用 -date= 選項定製格式)
%ar     作者修訂日期,按多久以前的方式顯示
%cn     提交者(committer)的名字
%ce     提交者的電子郵件地址
%cd     提交日期
%cr     提交日期,按多久以前的方式顯示
%s      提交說明

注:作者是指最後一次修改文件的人;而提交者是指提交該文件的人。

$ git log --pretty=format:"%an %ae %ad %cn %ce %cd %cr %s" --graph

--mergs - 查看所有合併過的提交歷史記錄
--no-merges - 查看所有未被合併過的提交信息
--author=someonet - 查詢指定作者的提交記錄

$ git log --author=maxsu

--since--affter - 僅顯示指定時間之後的提交(不包含當前日期)
--until--before - 僅顯示指定時間之前的提交(包含當前日期)

$ git log --before={3,weeks,ago} --after={2018-04-18}