在提交了若干更新,又或者克隆了某個項目以後
也許想回顧下提交歷史git
完成這個任務最簡單而又有效的工具是 git log
命令。github
使用 「simplegit」 項目做爲示例
首先克隆該項目:web
$ git clone https://github.com/schacon/simplegit-progit
在此項目中運行 git log
命令時,能夠看到下面的輸出:shell
默認狀況下,git log
會 按時間前後順序 列出全部的提交,最近的更新排在最上面
列出了每一個提交的 SHA-1 校驗和、做者名字和電子郵件地址、提交時間以及提交說明bash
選項 | 說明 |
---|---|
-p | 按補丁格式顯示每一個提交引入的差別 |
–stat | 顯示每次提交的文件修改統計信息 |
–shortstat | 只顯示 --stat 中最後的行數修改添加移除統計 |
–name-only | 僅在提交信息後顯示已修改的文件清單 |
–name-status | 顯示新增、修改、刪除的文件清單 |
–abbrev-commit | 僅顯示 SHA-1 校驗和全部 40 個字符中的前幾個字符 |
–relative-date | 使用較短的相對時間而不是完整格式顯示日期(好比,「2 weeks ago」) |
–graph | 在日誌旁以 ASCII 圖形顯示分支與合併歷史 |
–pretty | 使用其餘格式顯示歷史提交信息。選項包括 oneline,short,full,fuller 和 format |
其中一個比較有用的選項是 -p
,它會顯示每次提交所引入的差別
與此同時,也能夠使用 -2
選項來僅顯示最近的兩次提交app
$ git log -p -2
該選項除了顯示基本信息以外,還附帶了每次 commit
的變化svg
適用於當進行代碼審查
或者快速瀏覽某個搭檔提交所帶來的變化的時候函數
能夠使用 --stat
選項,查看每次提交的簡略統計信息:工具
$ git log --stat
在每次提交的下面列出全部被修改過的文件、有多少文件被修改了測試
能夠使用 --pretty
選項,自定義格式的方式展現提交歷史
這個選項有一些內建的 子選項 :
好比 oneline
會將每一個提交 放在一行顯示,在瀏覽大量的提交時很是有用
另外還有 short
,full
和 fuller
選項,它們展現信息的 格式詳盡程度 不一:
還有 format
,能夠 定製要顯示的記錄格式
這樣的輸出對後期提取分析格外有用
$ git log --pretty=format:"%h - %an, %ar : %s"
下表列出了經常使用的格式佔位符寫法及其表明的意義:
選項 | 說明 |
---|---|
%H | 提交的完整哈希值 |
%h | 提交的簡寫哈希值 |
%T | 樹的完整哈希值 |
%t | 樹的簡寫哈希值 |
%P | 父提交的完整哈希值 |
%p | 父提交的簡寫哈希值 |
%an | 做者名字 |
%ae | 做者的電子郵件地址 |
%ad | 做者修訂日期(能夠用 --date= 選項定製格式) |
%ar | 做者修訂日期,按多久之前的方式顯示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的電子郵件地址 |
%cd | 提交日期 |
%cr | 提交日期(距今多長時間) |
%s | 提交說明 |
做者:實際做出修改的人
提交者:最後將此工做成果提交到倉庫的人
因此,當你爲某個項目發佈補丁,而後某個核心成員將你的補丁併入項目時
你就是做者,而那個核心成員就是提交者
--graph
選項添加了一些 ASCII 字符串來形象地展現分支、合併歷史
當 oneline
或 format
與另外一個 log
選項 --graph
結合使用時尤爲有用:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap * 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit |\ | * 420eac9 Added a method for getting the current branch. * | 30e367c timeout code and tests * | 5a09431 add timeout protection to grit * | e1193f8 support for heads with slashes in them |/ * d6016bc require time for xmlschema * 11d191e Merge branch 'defunkt' into local
Git 默認會將全部的輸出傳送到 分頁程序 中
因此一次只會看到一頁的內容
除了定製輸出格式的選項以外,
git log
還有許多很是實用的限制輸出長度的選項,也就是隻輸出一部分的提交
選項 | 說明 |
---|---|
-(n) | 僅顯示最近的 n 條提交 |
–since, --after | 僅顯示指定時間以後的提交 |
–until, --before | 僅顯示指定時間以前的提交 |
–author | 僅顯示做者匹配指定字符串的提交 |
–committer | 僅顯示提交者匹配指定字符串的提交 |
–grep | 僅顯示提交說明中包含指定字符串的提交 |
-S | 僅顯示添加或刪除內容匹配指定字符串的提交 |
相似 --since
和 --until
這種按照時間做限制的選項頗有用
例如,下面的命令會列出最近兩週的全部提交:
$ git log --since=2.weeks
該命令可用的格式十分豐富——能夠是相似 「2014-11-10
」 的具體的某一天
也能夠是相似 「2 years 1 day 3 minutes ago
」 的相對日期
還能夠過濾出匹配指定條件的提交
用 --author
選項顯示指定做者的提交
用 --grep
選項搜索提交說明中的關鍵字
請注意,若是要 同時對做者和提交說明進行過濾 就必須添加 –all-match 選項
不然該命令將會匹配知足其中任意一個條件的提交
另外一個很是有用的過濾器是 -S
它接受一個字符串參數,而且只會顯示那些添加或刪除了該字符串的提交
假設想找出添加或刪除了對某一個特定函數的引用的提交,能夠調用:
$ git log -Sfunction_name
若是隻關心某些文件或者目錄的歷史提交
能夠在 git log 選項的最後指定它們的路徑(path)
由於是放在最後位置上的選項
因此用兩個短劃線(–)隔開以前的選項和後面限定的路徑名
若是要查看 2008 年 10 月期間 Git 源代碼倉庫中
由 Junio Hamano 提交的修改了測試文件而且還沒有合併的提交,能夠使用下面的命令:
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/ 5610e3b - Fix testcase failure when extended attributes are in use acd3b9e - Enhance hold_lock_file_for_{update,append}() API f563754 - demonstrate breakage of detached checkout with symbolic link HEAD d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths 51a94af - Fix "checkout --track -b newbranch" on detached HEAD b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
在近 40000 條提交中,上面的輸出僅列出了符合條件的 6 條記錄
參考: git
以上內容,均根據git官網介紹刪減、添加和修改組成
相關推薦:
Git筆記(5) 狀態記錄
Git筆記(4) 獲取倉庫
Git筆記(3) 安裝配置
Git筆記(2) 入門認知
Git筆記(1) 版本控制
謝謝