git log 的使用

無(wú)參數(shù)狀態(tài)

git log

默認(rèn)不用任何參數(shù)的話,git log 會(huì)按提交時(shí)間列出所有的更新,最近的更新排在最上面。每次更新都有一個(gè) SHA-1 校驗(yàn)和、作者的名字 和 電子郵件地址、提交時(shí)間,最后縮進(jìn)一個(gè)段落顯示提交說(shuō)明。

參數(shù)的說(shuō)明

代碼審查-展開(kāi)內(nèi)容差異: git log -p

展開(kāi)顯示每次提交的內(nèi)容差異, 用 -2 則僅顯示最近的兩次更新

git log -p -2

在做代碼審查,或者要快速瀏覽其他協(xié)作者提交的更新都作了哪些改動(dòng)時(shí),就可以用這個(gè)選項(xiàng)。

增改行數(shù)統(tǒng)計(jì) git log --stat

僅顯示簡(jiǎn)要的增改行數(shù)統(tǒng)計(jì)

git log --stat 

每個(gè)提交都列出了修改過(guò)的文件,以及其中添加和移除的行數(shù),并在最后列出所有增減行數(shù)小計(jì)。

git log --pretty

可以指定使用完全不同于默認(rèn)格式的方式展示提交歷史。

簡(jiǎn)單模式

git log --pretty=oneline
git log --pretty=short
git log --pretty=full
git log --pretty=fuller

定制格式

定制格式 format,可以定制要顯示的記錄格式,這樣的輸出便于后期編程提取分析:

git log --pretty=format:"%h - %an, %ar : %s"

常用的格式占位符寫(xiě)法及其代表的意義:

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

你一定奇怪 作者(author)提交者(committer) 之間究竟有何差別,其實(shí)作者指的是實(shí)際作出修改的人,提交者指的是最后將此工作成果提交到倉(cāng)庫(kù)的人。所以,當(dāng)你為某個(gè)項(xiàng)目發(fā)布補(bǔ)丁,然后某個(gè)核心成員將你的補(bǔ)丁并入項(xiàng)目時(shí),你就是作者,而那個(gè)核心成員就是提交者。我們會(huì)在第五章再詳細(xì)介紹兩者之間的細(xì)微差別。

用 oneline 或 format 時(shí)結(jié)合 --graph 選項(xiàng),可以看到開(kāi)頭多出一些 ASCII 字符串表示的簡(jiǎn)單圖形,形象地展示了每個(gè)提交所在的分支及其分化衍合情況。在我們之前提到的 Grit 項(xiàng)目倉(cāng)庫(kù)中可以看到:

git log --pretty=format:"%h %s" --graph

以上只是簡(jiǎn)單介紹了一些 git log 命令支持的選項(xiàng)。表 2-2 還列出了一些其他常用的選項(xiàng)及其釋義。

選項(xiàng) 說(shuō)明
-p 按補(bǔ)丁格式顯示每個(gè)更新之間的差異。
--stat 顯示每次更新的文件修改統(tǒng)計(jì)信息。
--shortstat 只顯示 --stat 中最后的行數(shù)修改添加移除統(tǒng)計(jì)。
--name-only 僅在提交信息后顯示已修改的文件清單。
--name-status 顯示新增、修改、刪除的文件清單。
--abbrev-commit 僅顯示 SHA-1 的前幾個(gè)字符,而非所有的 40 個(gè)字符。
--relative-date 使用較短的相對(duì)時(shí)間顯示(比如,“2 weeks ago”)。
--graph 顯示 ASCII 圖形表示的分支合并歷史。
--pretty 使用其他格式顯示歷史提交信息。可用的選項(xiàng)包括 oneline,short,full,fuller 和 format(后跟指定格式)。

限制輸出長(zhǎng)度

除了定制輸出格式的選項(xiàng)之外,git log 還有許多非常實(shí)用的限制輸出長(zhǎng)度的選項(xiàng),也就是只輸出部分提交信息。之前我們已經(jīng)看到過(guò) -2 了,它只顯示最近的兩條提交,實(shí)際上,這是 -<n> 選項(xiàng)的寫(xiě)法,其中的 n 可以是任何自然數(shù),表示僅顯示最近的若干條提交。不過(guò)實(shí)踐中我們是不太用這個(gè)選項(xiàng)的,Git 在輸出所有提交時(shí)會(huì)自動(dòng)調(diào)用分頁(yè)程序(less),要看更早的更新只需翻到下頁(yè)即可。

另外還有按照時(shí)間作限制的選項(xiàng),比如 --since 和 --until。

git log --since / git log --until

下面的命令列出所有最近兩周內(nèi)的提交:

$ git log --since=2.weeks

你可以給出各種時(shí)間格式,比如說(shuō)具體的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。

git log --author

顯示指定作者的提交

git log --grep

用 --grep 選項(xiàng)搜索提交說(shuō)明中的關(guān)鍵字。(請(qǐng)注意,如果要得到同時(shí)滿足這兩個(gè)選項(xiàng)搜索條件的提交,就必須用--all-match 選項(xiàng)。)

git log -- <path>

如果只關(guān)心某些文件或者目錄的歷史提交,可以在 git log 選項(xiàng)的最后指定它們的路徑。因?yàn)槭欠旁谧詈笪恢蒙系倪x項(xiàng),所以用兩個(gè)短劃線(--)隔開(kāi)之前的選項(xiàng)和后面限定的路徑名。

表 2-3 還列出了其他常用的類似選項(xiàng)。

選項(xiàng) 說(shuō)明
-(n) 僅顯示最近的 n 條提交
--since, --after 僅顯示指定時(shí)間之后的提交。
--until, --before 僅顯示指定時(shí)間之前的提交。
--author 僅顯示指定作者相關(guān)的提交。
--committer 僅顯示指定提交者相關(guān)的提交。

來(lái)看一個(gè)實(shí)際的例子,如果要查看 Git 倉(cāng)庫(kù)中,2008 年 10 月期間,Junio Hamano 提交的但未合并的測(cè)試腳本(位于項(xiàng)目的 t/ 目錄下的文件),可以用下面的查詢命令:

$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
   --before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attribute
acd3b9e - Enhance hold_lock_file_for_{update,append}()
f563754 - demonstrate breakage of detached checkout wi
d1a43f2 - reset --hard/read-tree --reset -u: remove un
51a94af - Fix "checkout --track -b newbranch" on detac
b0ad11e - pull: allow "git pull origin $something:$cur

Git 項(xiàng)目有 20,000 多條提交,但我們給出搜索選項(xiàng)后,僅列出了其中滿足條件的 6 條。

使用圖形化工具查閱提交歷史

有時(shí)候圖形化工具更容易展示歷史提交的變化,隨 Git 一同發(fā)布的 gitk 就是這樣一種工具。它是用 Tcl/Tk 寫(xiě)成的,基本上相當(dāng)于 git log 命令的可視化版本,凡是git log 可以用的選項(xiàng)也都能用在 gitk 上。在項(xiàng)目工作目錄中輸入 gitk 命令后,就會(huì)啟動(dòng)圖 2-2 所示的界面。

圖 2-2. gitk 的圖形界面

上半個(gè)窗口顯示的是歷次提交的分支祖先圖譜,下半個(gè)窗口顯示當(dāng)前點(diǎn)選的提交對(duì)應(yīng)的具體差異。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 參考鏈接git log命令使用 git log 如果不帶任何參數(shù),它會(huì)列出所有歷史記錄,最近的排在最上方,顯示提交...
    LeonYin閱讀 1,713評(píng)論 0 1
  • Add & Commit git init 初始化一個(gè) Git 倉(cāng)庫(kù)(repository),即把當(dāng)前所在目錄變成...
    冬絮閱讀 5,132評(píng)論 0 9
  • Git的使用 首先登錄https://git.oschina.net,如沒(méi)有賬號(hào)進(jìn)行注冊(cè). Git簡(jiǎn)單介紹 Git...
    Sunney閱讀 754評(píng)論 0 2
  • git基礎(chǔ)總結(jié) 在工作目錄中初始化新倉(cāng)庫(kù):$ git init 將文件添加到git: 格式:$ git add 舉...
    努力三兒閱讀 477評(píng)論 0 0
  • Git 與 SVN 區(qū)別 Git不僅僅是個(gè)版本控制系統(tǒng),它也是個(gè)內(nèi)容管理系統(tǒng)(CMS),工作管理系統(tǒng)等。如果你是一...
    心至靜行至遠(yuǎn)閱讀 753評(píng)論 0 5

友情鏈接更多精彩內(nèi)容