如何在我提交的文件中执行`git grep`?

时间:2017-09-20 09:15:14

标签: git search grep

有没有办法让git grep只匹配我提交的文件?

目的是grep文件的内容,而不是日志消息。

2 个答案:

答案 0 :(得分:3)

author="your name"

git log --pretty="%H" --author="$author" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq |xargs grep -i "String to grep"

或更短的版本:

author="your name"
git log --no-merges --author="$author" --name-only --pretty=format:"" | sort -u |xargs grep -i <string>

Orignal answer用于获取特定用户的文件

答案 1 :(得分:3)

如果你想在提交的差异中进行grep,你应该使用git log -Ggit log -S

git log -p --author="your name" -G pattern

-G-S都将查找提交引入的差异中的模式,
差异是(git help log):

  

为了说明-S<regex> --pickaxe-regex-G<regex>之间的区别,请考虑使用以下差异进行提交   同一档案:

+    return !regexec(regexp, two->ptr, 1, &regmatch, 0);
...
-    hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0);
     

虽然git log -G"regexec\(regexp"会显示此提交,但git log -S"regexec\(regexp" --pickaxe-regex不会(因为   该字符串的出现次数没有改变。)

-p-G-S结合使用时,只会显示与该模式匹配的文件。