繁体   English   中英

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

[英]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 -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结合使用时,将仅显示与该模式匹配的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM