如何grep Git提交某个单词的差异或内容?

在Git代码库中,我想列出包含某个单词的所有提交。 我试过这个

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

但它不一定会让我回到文件名(除非它少于我搜索的词的5行),我也试过了

git grep "word"

但它只给我现在的文件而不是历史。

如何搜索整个历史记录,以便我可以跟踪特定单词的变化? 我的意思是在我的代码库中搜索出现的单词来追踪更改(在文件历史记录中搜索)。


如果您想查找提交消息中包含给定单词的所有提交,请使用

$ git log --grep=word

如果你想查找文件内容中添加或删除“单词”的所有提交(更确切地说:“单词”发生次数改变的地方),即搜索提交内容,使用所谓的“镐”搜索

$ git log -Sword

在现代的git中也有

$ git log -Gword

寻找添加或删除的行匹配“单词”(还有提交内容)的差异。

请注意, -G默认接受正则表达式,而-S接受一个字符串,但可以修改为使用--pickaxe-regex接受--pickaxe-regex

为了说明-S<regex> --pickaxe-regex-G<regex>之间的差异,请考虑在同一个文件中使用以下差异提交:

+    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不会(因为该字符串的出现次数没有改变)。


git log的镐会发现包含“word”与git log -Sword


经过大量实验后,我可以推荐以下内容,它显示了提交或删除包含给定正则表达式的行的提交,并显示每个文本中的文本更改,并显示添加和删除单词的颜色。

git log --pickaxe-regex -p --color-words -S "<regexp to search for>"

需要一段时间才能运行... ;-)

链接地址: http://www.djcxy.com/p/8289.html

上一篇: How to grep Git commit diffs or contents for a certain word?

下一篇: name` pattern that matches multiple patterns