在Git代碼庫中,我想列出包含特定單詞的全部提交。 我試過這個 git
git log -p | grep --context=4 "word"
但它並不必定會給我回文件名(除非它比我搜索的單詞少了5行。我也嘗試過 正則表達式
git grep "word"
但它只給我如今的文件,而不是歷史。 vim
如何搜索整個歷史記錄以便我能夠跟蹤特定單詞的更改? 個人意思是在個人代碼庫中搜索單詞的出現以跟蹤更改(在文件歷史記錄中搜索)。 ide
git log
的pickaxe會在git log -Sword
找到包含「word」的更改提交spa
若是要查找提交消息包含給定單詞的全部提交,請使用 code
$ git log --grep=word
若是你想找到全部在文件內容中添加或刪除「word」的提交(更確切地說:「word」的出現次數發生變化),即搜索提交內容 ,使用所謂的'pickaxe'搜索 regexp
$ git log -Sword
在現代的git中也有 字符串
$ git log -Gword
查找添加或刪除的行與「word」匹配的差別 (也是提交內容 )。 get
請注意, -G
默認接受正則表達式,而-S
接受字符串,但能夠使用--pickaxe-regex
修改成接受--pickaxe-regex
。 it
爲了說明
-S<regex> --pickaxe-regex
和-G<regex>
之間的區別,請考慮在同一文件中使用如下diff進行提交:+ return !regexec(regexp, two->ptr, 1, ®match, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);而
git log -G"regexec\\(regexp"
將顯示此提交,git log -S"regexec\\(regexp" --pickaxe-regex
不會(由於該字符串的出現次數沒有改變)。
要在正則表達式上使用布爾鏈接器:
git log --grep '[0-9]*\|[a-z]*'
此正則表達式在提交消息上搜索正則表達式[0-9] *或[az] *。
vim-fugitive對於Vim中的那種檢查是多功能的。
使用:Ggrep
這樣作。 有關更多信息,您能夠安裝vim-fugitive並查看turorial :help Grep
。 而這一集: 探索歷史的git-repository將指導你作全部這些。
還有一種方法/語法是: git log -S "word"
像這樣你能夠搜索例如git log -S "with whitespaces and stuff @/#ü !"