[英]How to do `git grep` only in files I have committed?
有没有办法使git grep
只匹配我提交的文件?
目的是grep输入文件的内容,而不是日志消息。
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>
用于从特定用户获取文件的原始答案
如果要在提交的差异中进行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
结合使用时,将仅显示与该模式匹配的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.