參考
http://www.javashuo.com/article/p-zzlvveip-kc.htmlhtml
https://www.cnblogs.com/mkl34367803/p/9219913.htmlgit
挑選一些經常使用選項工具
不帶參數
git log 字體
若是不帶任何參數,它會列出全部歷史記錄,最近的排在最上方,顯示提交對象的哈希值,做者、提交日期、和提交說明spa
查詢提交內容統計stat
git log --stat debug
顯示每次提交的內容,僅顯示簡要的增改行數統計3d
格式化輸出pretty
git log --pretty=[...] 日誌
使用其餘格式顯示歷史提交信息,可選項有:orm
- oneline
- short
- medium
- full
- fuller
- raw
- format:<string>,默認爲medium,如:
--pretty=oneline :一行顯示,只顯示哈希值和提交說明(--online自己也能夠做爲單獨的屬性)
--pretty=format:"" :控制顯示的記錄格式,如:
- %H 提交對象(commit)的完整哈希字串
- %h 提交對象的簡短哈希字串
- %T 樹對象(tree)的完整哈希字串
- %t 樹對象的簡短哈希字串
- %P 父對象(parent)的完整哈希字串
- %p 父對象的簡短哈希字串
- %an 做者的名字(author name)
- %ae 做者的電子郵件地址(author email)
- %ad 做者修訂日期(能夠用 -date= 選項定製格式)
- %ar 做者修訂日期,按多久之前的方式顯示
- %cn 提交者(committer)的名字
做者和提交者的區別不知道是啥?
做者與提交者的關係:做者是程序的修改者,提交者是代碼提交人(本身的修改不提交是怎麼能讓別人拉下來再提交的?)
其實做者指的是實際做出修改的人,提交者指的是最後將此工做成果提交到倉庫的人。因此,當你爲某個項目發佈補丁,而後某個核心成員將你的補丁併入項目時,你就是做者,而那個核心成員 就是提交者(soga)
- %ce 提交者的電子郵件地址
- %cd 提交日期(能夠用 -date= 選項定製格式)
- %cr 提交日期,按多久之前的方式顯示
- %s 提交說明
帶顏色的 --pretty=format:"" ,這個另外寫出來分析
以這句爲例:%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>
它的效果是:
先斷句:[%Cred%h][%Creset -][%C(yellow)%d ][%Cblue%s][%Cgreen(%cd)][%C(bold blue)<%an>]
而後就是很明顯能獲得的規律了
一個顏色+一個內容
顏色以%C開頭,後邊接幾種顏色,還能夠設置字體,若是要設置字體的話,要一塊加個括號
能設置的顏色值包括: reset (默認的灰色), normal , black , red , green , yellow , blue , magenta , cyan , white .
字體屬性則有 bold , dim , ul , blink , reverse .
內容能夠是佔位元字符,也能夠是直接顯示的普通字符
- 查詢用戶,郵件,commit message的且在指定日期內的帶顏色的提交
控制輸出日誌條目n
git log -n [N]
顯示前n條log
- 查詢最近的2條提交
根據時間查詢after和before
git log --after="yyyy-mm-dd"
- 查詢2019-01-01到2019-03-06的全部提交
根據用戶名查詢author
git log --author=[...]
author使用用戶名或者郵箱均可以,查詢結果是一致的.
做者名不須要精確匹配,只須要包含就好了.
可使用正則表達式.
- 查詢指定用戶的全部提交
根據提交消息查詢grep
git log --grep=[...]
過濾提交信息commit message記錄
能夠傳入-i用來忽略大小寫
注意:若是想同時使用--grep和--author,必須在附加一個--all-match參數
- 查詢commit message包含edp608的全部提交
按文件查詢--
git log -- [path]
- -(空格)或[沒有]
有時你可能只對某個文件的修改感興趣, 你只想查看跟某個文件相關的歷史信息, 你只須要插入你感興趣文件的路徑[對,是路徑,因此常常是不太好用]就能夠了
好比:git log -- foo.py bar.py ,只返回和foo.py或bar.py相關的commit
這裏的--是告訴Git後面的參數是文件路徑而不是branch的名字. 若是後面的文件路徑不會和某個branch產生混淆, 你能夠省略- -,好比git log foo.py
另外,後邊的路徑還支持正則,好比:git log *install.md 是,指定項目路徑下的全部以install.md結尾的文件的提交歷史
另外,文件名應該放到參數的最後位置,一般在前面加上--並用空格隔開表示是文件
另外,git log file/ 查看file文件夾下全部文件的提交記錄
- 查詢指定文件的全部提交記錄
根據提交的文件內容查詢-S/-G
git log -S"..."
git log -G"..."
有時你想搜索和新增或刪除某行代碼相關的commit. 可使用這條命令
假設你想知道Hello, World!這句話是何時加入到項目裏去的,能夠用:git log -S"Hello,World!"
另外:若是你想使用正則表達式去匹配而不是字符串, 那麼你可使用-G代替-S.
這是一個很是有用的debug工具, 使用他你能夠定位全部跟某行代碼相關的commit. 甚至能夠查看某行是何時被copy的, 何時移到另一個文件中去的
注:-S後沒有"=",與查詢內容之間也沒有空格符
- 查詢內容有指定字符串的提交
查詢單次提交內容show
git show [commit hash] [filePath]
- 查詢在哈希值爲2d38...提交下的全部修改內容
- 查詢pom文件在哈希值爲2d38...提交下的修改狀況