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

相关文章
相关标签/搜索