有没有办法让git grep
只匹配我提交的文件?
目的是grep文件的内容,而不是日志消息。
答案 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 -G
或git 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, ®match, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
虽然
git log -G"regexec\(regexp"
会显示此提交,但git log -S"regexec\(regexp" --pickaxe-regex
不会(因为 该字符串的出现次数没有改变。)
将-p
与-G
或-S
结合使用时,只会显示与该模式匹配的文件。