Git搜索所有差异

时间:2012-06-17 00:53:59

标签: git search grep diff

我正在尝试搜索与特定变量名称相关的git历史记录中的更改。

我试过这样做:

git diff HEAD~25000 | grep -in mydistinctvariablename

结果不告诉我结果行来自哪个提交,并且需要相当长的时间(大约5-7分钟)。

有没有人有更好的解决方案,时间和结果?

1 个答案:

答案 0 :(得分:39)

git log通常是检查提交历史记录时使用的命令。 git log --grep可用于在提交消息中搜索正则表达式。

您所追求的是git log -S,它只是简单地搜索提交内容,或git log -G使用正则表达式搜索它:

  

-S   寻找引入或删除实例的差异。请注意,这与简单地出现在diff输出中的字符串不同;有关更多详细信息,请参阅gitdiffcore(7)中的pickaxe条目。

因此,例如,在msysGit存储库中,我可以使用以下任一方法找到引入Tcl 8.5.8的提交:

C:\src\msysgit\src>git log --oneline --grep "8\.5\.8"
d938476 Make `NO_SFX=1 portable-release.sh` work
ef1dc94 Update tk to version 8.5.8
a910049 Update tcl to version 8.5.8
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list

它只是在提交消息中查找8.5.8,或者您想查看仅在提交的diff中出现的字符串:

C:\src\msysgit\src>git log --oneline -S"version=8.5.8"
7be8622 tcltk: update release.sh script for tcl/tk 8.5.9
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list

此处仍然可以使用样本中的范围限制来限制要检查的提交。仔细阅读git log手册,以便了解它可以做的所有事情。

请注意,-S只是查找简单的字符串差异 - 如果您真的想使用与您的示例类似的正则表达式搜索内容,那么您应该使用-G选项而不是{{1}但这会慢得多。