如何grep Git爲某個單詞提交差別或內容?

在Git代碼庫中,我想列出包含特定單詞的全部提交。 我試過這個 git

git log -p | grep --context=4 "word"

但它並不必定會給我回文件名(除非它比我搜索的單詞少了5行。我也嘗試過 正則表達式

git grep "word"

但它只給我如今的文件,而不是歷史。 vim

如何搜索整個歷史記錄以便我能夠跟蹤特定單詞的更改? 個人意思是在個人代碼庫中搜索單詞的出現以跟蹤更改(在文件歷史記錄中搜索)。 ide


#1樓

git log的pickaxe會在git log -Sword找到包含「word」的更改提交spa


#2樓

若是要查找提交消息包含給定單詞的全部提交,請使用 code

$ git log --grep=word

若是你想找到全部在文件內容中添加或刪除「word」的提交(更確切地說:「word」的出現次數發生變化),即搜索提交內容 ,使用所謂的'pickaxe'搜索 regexp

$ git log -Sword

在現代的git中也有 字符串

$ git log -Gword

查找添加或刪除的行與「word」匹配的差別 (也是提交內容 )。 get

請注意, -G默認接受正則表達式,而-S接受字符串,但能夠使用--pickaxe-regex修改成接受--pickaxe-regexit

爲了說明-S<regex> --pickaxe-regex-G<regex>之間的區別,請考慮在同一文件中使用如下diff進行提交:

+ return !regexec(regexp, two->ptr, 1, &regmatch, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0);

git log -G"regexec\\(regexp"將顯示此提交, git log -S"regexec\\(regexp" --pickaxe-regex不會(由於該字符串的出現次數沒有改變)。


#3樓

要在正則表達式上使用布爾鏈接器:

git log --grep '[0-9]*\|[a-z]*'

此正則表達式在提交消息上搜索正則表達式[0-9] *或[az] *。


#4樓

vim-fugitive對於Vim中的那種檢查是多功能的。

使用:Ggrep這樣作。 有關更多信息,您能夠安裝vim-fugitive並查看turorial :help Grep 。 而這一集: 探索歷史的git-repository將指導你作全部這些。


#5樓

還有一種方法/語法是: git log -S "word"
像這樣你能夠搜索例如git log -S "with whitespaces and stuff @/#ü !"

相關文章
相關標籤/搜索