Git 搜索所有差异

标签 git search grep diff

我正在尝试在我的 git 历史记录中搜索与非常具体的变量名相关的更改。

我试过这样做:

git diff HEAD~25000 | grep -in mydistinctvariablename

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

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

最佳答案

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

你想要的是 git log -S 简单地搜索提交内容或者 git log -G 用正则表达式搜索它:

-S Look for differences that introduce or remove an instance of . Note that this is different than the string simply appearing in diff output; see the pickaxe entry in gitdiffcore(7) for more details.

因此,例如,在 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 但这会明显变慢。

关于Git 搜索所有差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11068145/

相关文章:

java - 在 Linux 上执行 grep 命令并捕获结果

git - 如何过滤特定目标分支的所有 GitHub pull 请求

ios - 在一个分支中创建的文件在另一个分支中以红色显示为丢失

linux - 当我尝试添加一个文件名在 Windows 上无效的文件时,我可以让 git 警告我吗?

c++ - 在两个文本文件中搜索词 C++

linux - 如何使用 sed 只显示一行中的某些单词?

git - 在 git 存储库上用另一个项目替换一个项目

google-chrome - chrome多功能框如何在域上添加搜索

mysql - 获取结果字符串,与给定字符的顺序无关

awk - 如果第二行为空则打印文件名