git shortlog -sne 可输出带邮箱的作者提交次数并按数量倒序排列,解决因邮箱别名、大小写等导致的作者拆分问题,是识别真实作者列表的可靠起点。

直接用 git shortlog 就能快速看到某人提交次数,但“统计某个人”不是加个 --author 就完事——它默认不认作者名,只按 commit author 字段原始值分组,而这个字段常因邮箱别名、大小写、GPG签名或 rebase 被拆成多个条目。
git shortlog -sne 怎么看真实作者列表
先别急着筛人,得知道仓库里实际有哪些 author 标识:
-
git shortlog -sne输出带邮箱的提交计数,这是最可靠的起点(-e强制显示邮箱,-s只要数字,-n按数量倒序) - 如果同一人出现多行(比如
zhang@company.com和zhangsan@work.cn),说明没做.mailmap映射,后续统计会虚高 - Windows 用户注意:PowerShell 默认不识别
git shortlog的某些选项,建议用 Git Bash 运行
git shortlog --author="xxx" 为什么经常漏人
--author 是字符串匹配,不是语义识别,且默认只查当前分支:
- 必须加
--all,否则其他分支上的提交完全不出现 - 名字含空格或括号(如
Zhang San (Tech))要加双引号,否则 shell 解析出错 - 邮箱过滤比姓名可靠:用
git shortlog --author="zhang@company.com",而不是--author="Zhang" - 正则支持需显式启用:
git -E shortlog --author="(?i)zhang.*san",否则.*当字面量处理
怎么统计某人新增/删除行数,而不是只看提交次数
git shortlog 本身不提供行数统计,得靠 git log --numstat 配合 awk:
- 基础命令:
git log --numstat --author="zhang@company.com" --pretty=format:"" | awk 'NF==3 {ins+=$1; del+=$2} END {print "insertions:", ins, "deletions:", del}' -
--numstat输出三列(新增行、删除行、文件路径),--pretty=format:""去掉 commit header,避免干扰解析 - 合并提交(merge commit)默认不触发
--numstat,如需包含,加--no-merges或改用git diff --shortstat对比两个点 - 二进制文件、重命名、权限变更全不统计——这不是 bug,是 git 的设计限制,别指望它算出 .png 或 .pdf 的“行数”
导出某人所有修改过的文件列表
想确认某人碰过哪些代码,用 --name-only 最直接:
git log --author="zhang@company.com" --name-only --pretty=format: --all | sort -u-
--pretty=format:是关键,它清空每条 commit 的 header 行,只留文件名;漏掉这句,输出里会混入哈希、日期等干扰项 - 如果只想看最近三个月:
--since="2026-01-20",注意格式必须是 ISO(YYYY-MM-DD),否则被忽略 - 路径过滤可加
-- src/在末尾,只统计src/目录下的变更
真正容易被忽略的是:所有这些统计都基于 author 字段快照,一旦历史被 filter-branch 或 git rebase -i 改写过,旧 author 信息就不可逆丢失——别在已 rebased 的分支上信誓旦旦说“张三贡献了 80%”。


















