git log --author 默认精确匹配 author 字段(非 committer),不自动忽略大小写或空格,需手动输入完整姓名或邮箱;搜不到常因作者名格式不一致、混淆 --author 与 --committer、中文编码不匹配或未引号包裹含空格姓名。

直接用 git log --author 就能筛出指定作者的提交,但默认只匹配 author 字段(不是 committer),且不区分大小写、不支持模糊前缀自动补全——得手动输全名或邮箱片段。
为什么 --author 有时搜不到人?
常见错误是把 --committer 和 --author 混了:前者匹配“谁执行了 commit”,后者匹配“谁写了代码并署名”。CI 自动提交、rebase 后的提交、别人代提交时,两者经常不一致。
- 想查“谁真正写了这段代码”,用
--author - 想查“谁把这次提交推上主干”,用
--committer - 邮箱比姓名更可靠:
git log --author="alice@company.com"比--author="Alice"更少误漏 - 姓名含空格必须加引号:
--author="John Doe",否则 Git 只取第一个词
--author 怎么配合时间、关键词一起用?
组合筛选时顺序无关,但参数之间是“与”关系,不是“或”。比如 git log --author="bob" --since="2 weeks ago" --grep="api" 表示:bob 写的、两周内、提交信息首行含 api 的提交。
-
--grep默认只扫 subject(提交信息第一行),body 里的内容搜不到;要搜完整 message,得加--pretty="%h %s %b"再管道grep - 多个
--grep在 Git 2.39+ 是 OR 关系,旧版默认是 AND,行为不一致,建议明确用--all-match或--invert-grep - 加
--no-merges能排除合并提交,避免干扰——尤其在主干分支上,合并提交占比可能超 30%
中文名、特殊字符怎么处理?
Git 对 author 字段不做编码转换,它存的是原始字节。如果你的 git config user.name 设的是中文,那 --author 必须用完全一致的 UTF-8 字符串匹配,终端编码不一致就会失败。
- 推荐统一用邮箱过滤,规避编码问题:
--author="zhangsan@example.com" - 如果非用中文名,确认
git log --pretty="%an" | head -1输出和你要搜的一致(包括空格、标点) - Mac / Linux 终端一般没问题;Windows Git Bash 需确保
core.autocrlf不干扰,且终端字体支持 UTF-8 - 别用
--oneline配--author查中文——--oneline会截断 name 字段显示,导致匹配失效
最容易被忽略的是:Git 不会对 author 字段做任何 normalize(比如大小写折叠、空格压缩),它就是原始字符串精确比对。哪怕你 config 里写的是 Zhang San,但某次提交用了 zhang san,--author="Zhang San" 就搜不到那条——这种不一致在跨平台、多工具协作时特别常见。











