在Git代碼庫中,我想列出包含某個單詞的所有提交。我想這如何grep Git爲某個單詞提交差異或內容?
git log -p | grep --context=4 "word"
,但它並不一定給我回的文件名(除非它是小於5條 線從我搜索這個詞了。我也試過
git grep "word"
,但它給了我只顯示文件而不顯示歷史記錄
如何搜索整個歷史記錄以便我可以關注特定單詞的變化?我的意思是搜索我的代碼庫以查找單詞的出現情況以追蹤更改(在文件歷史記錄中搜索)。
在Git代碼庫中,我想列出包含某個單詞的所有提交。我想這如何grep Git爲某個單詞提交差異或內容?
git log -p | grep --context=4 "word"
,但它並不一定給我回的文件名(除非它是小於5條 線從我搜索這個詞了。我也試過
git grep "word"
,但它給了我只顯示文件而不顯示歷史記錄
如何搜索整個歷史記錄以便我可以關注特定單詞的變化?我的意思是搜索我的代碼庫以查找單詞的出現情況以追蹤更改(在文件歷史記錄中搜索)。
如果你想找到所有提交哪裏提交信息包含給定詞,使用
$ git log --grep=word
如果你想發現其中添加或移除「字」在文件內容所有提交(更精確地說:這裏的「字」改爲OCCURENCES數),即搜索提交內容,使用所謂的「鶴嘴鋤」與
$ git log -Sword
搜索在現代混帳還有
$ git log -Gword
尋找差異其添加或刪除線相匹配「字」(也提交內容)。
請注意,默認情況下,-G
接受正則表達式,而-S
接受字符串,但可以修改爲使用--pickaxe-regex
接受正則表達式。
爲了說明
-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
的鶴嘴鋤會發現提交與變化,包括‘字’與git log -Sword
這並不完全準確。 -S
雖然這通常是正確的答案,但我只是爲了鼓勵其他人閱讀此答案而低估了它(http://stackoverflow.com/a/1340245/ 586983)有3種不同的方式,並解釋他們的微妙之處。 – jakeonrails 2016-01-07 19:18:42
gosh!我認爲這不是一個很好的理由來降低正確的答案......你不確定包括評論中的鏈接是否足夠鼓勵? – Deborah 2016-06-24 04:53:09
要在正則表達式使用布爾連接器:
git log --grep '[0-9]*\|[a-z]*'
這個正則表達式搜索正則表達式[0-9] *或[A-Z] *上提交消息。
vim-fugitive是多才多藝的那種Vim中檢查的。
使用:Ggrep
做到這一點。欲瞭解更多信息,你可以安裝vim-fugitive,並通過:help Grep
查找turorial。而這一集:exploring-the-history-of-a-git-repository將指導你做所有這些。
另一種方式/語法來做到這一點是:git log -S "word"
這樣你就可以搜索例如git log -S "with whitespaces and stuff @/#ü !"
大量實驗後,我可以推薦以下,這表明,引入或刪除包含行提交一個給定的正則表達式,並顯示每個文本的變化,顏色顯示單詞添加和刪除。
git log --pickaxe-regex -p --color-words -S "<regexp to search for>"
需要一段時間來,雖然運行... ;-)
你可以試試下面的命令:
git log --patch --color=always | less +/searching_string
或以下列方式使用grep
:
git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'
在您想要搜索的父目錄中運行此命令。
我喜歡這種方法,因爲我看到的提交有數百行無關的更改,而我只對涉及我正在搜索的單詞的實際修補程序感興趣。要使用'git log --patch --color = always |少加+/searching_string'。 – 2016-10-16 19:17:50
'git log -S字'也適用於第二種情況 – 2013-02-07 16:55:54
* -S- *和* -G *在'man git log'中很不清楚。我必須閱讀和實驗三次才能發現差異。 –
2013-10-01 14:06:13
@TankorSmash'-S'尋找引入或移除實例的差異。 '-G '尋找添加或刪除的行與給定的匹配的差異。 –
2013-11-04 20:19:42