我想搜索与一个非常特定的变量名相关的git历史更改。
我尝试过这样做:
git diff HEAD~25000 | grep -in mydistinctvariablename
这些结果并没有告诉我这些输出行来自哪个提交,并且它需要相当长的时间(大约5-7分钟)。
是否有更好的解决方案,无论是在时间还是结果上?
我想搜索与一个非常特定的变量名相关的git历史更改。
我尝试过这样做:
git diff HEAD~25000 | grep -in mydistinctvariablename
这些结果并没有告诉我这些输出行来自哪个提交,并且它需要相当长的时间(大约5-7分钟)。
是否有更好的解决方案,无论是在时间还是结果上?
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,或者您可以查看仅出现在提交差异中的字符串:
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
,但这将显著降低速度。
d938476 Make \
NO_SFX=1 portable-release.sh` work` 这一行很令人困惑,因为它暗示了第一个代码片段是第二个代码片段的内容(换句话说,如果将该行从示例输出中删除,可能会更清晰明了...) - acdcjunior