Git搜索所有差异

4zcjmb1e  于 2023-04-10  发布在  Git
关注(0)|答案(1)|浏览(141)

我试图在我的git历史记录中搜索与一个非常具体的变量名相关的更改。
我试过这样做:

git diff HEAD~25000 | grep -in mydistinctvariablename

结果没有告诉我结果行来自哪个提交,这需要相当多的时间(大约5-7分钟)。
有没有人有更好的解决方案,时间和结果明智?

9ceoxa92

9ceoxa921#

git log通常是检查提交历史时使用的命令。git log --grep可用于搜索提交消息中的正则表达式。
你需要的是git log -S,它简单地搜索提交内容,或者是git log -G,它用正则表达式搜索提交内容:
-S<string>查找引入或删除<string>示例的差异。请注意,这与仅出现在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选项而不是-S,但这将显着较慢。

相关问题