如何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, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 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?