在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 @/#ü !"