git log 无法直接按人统计增删行数,需结合 --pretty="%an" --shortstat 与 awk 脚本聚合匹配 insertions/deletions 并按作者累加,注意合并提交、gpg签名、邮箱别名及ci机器人提交导致的统计偏差。

git log 怎么按人统计新增/删除行数
直接用 git log 自带的 --shortstat 和 --author 组合不够,得靠 awk 或 sed 做聚合。核心是把每次提交的增删行信息(形如 12 insertions(+), 3 deletions(-))抽出来,再按作者归并。
- 先用
git log --pretty="%an" --shortstat输出作者名和统计行 - 用
awk匹配insertions和deletions,累加到对应作者下 - 注意:
--shortstat只对有变更的提交生效,合并提交或空提交会漏掉行数 - Windows 用户如果没装
awk,可用 PowerShell 替代,但正则要重写,容易丢精度
示例命令(Linux/macOS):git log --pretty="%an" --shortstat | awk '/^ [0-9]+ file[s]* changed/ {f=$1; i=0; d=0; next} / insertions/ {i+=$1} / deletions/ {d+=$1} !/^ [0-9]+ file[s]* changed/ && !/ insertions/ && !/ deletions/ && NF==1 {a=$1; if (i||d) {ins[a]+=i; del[a]+=d; i=0; d=0}} END {for (n in ins) printf "%-20s %+8d %-8d\n", n, ins[n], del[n]}' | sort -k2nr
git shortlog -s -n 统计的是提交次数,不是代码行数
git shortlog -s -n 只数 commit 数量,和实际改了多少行完全无关。有人看到“张三 42”就以为他写了最多代码,其实他可能只改了 3 行 README,而李四 5 次提交全在重构核心模块。
监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。
- 这个命令本质是
git log --pretty=format:"%an"的去重计数,不读取 diff - 适合快速看谁最活跃,但不能用于绩效、评审或工作量评估
- 如果仓库启用了 GPG 签名或邮箱别名(比如
zhang@company.com和zhangsan@work.cn),shortlog会当成两个人,需提前用.mailmap合并
git diff --shortstat 与 git log --shortstat 的区别在哪
git diff --shortstat 算的是「当前工作区 vs 某个提交」的差异,而 git log --shortstat 是遍历历史里每个提交各自的增删行。想看某次 PR 的净改动,用前者;想看某人长期贡献,必须用后者 + 脚本聚合。
-
git diff HEAD~3 --shortstat:只算最近 3 次提交合并后的总差值,会掩盖中间撤销、反复修改的情况 -
git log HEAD~3..HEAD --shortstat:才真正列出这 3 次提交各自的变化,适合做细粒度分析 - 注意
--shortstat不统计二进制文件、重命名、权限变更,这些在git log --stat里也看不到
为什么 git log --author="xxx" 统计不准
常见原因不是命令写错,而是 Git 记录的 author 信息和你预期的不一致。Git 提交里的 author 字段由 user.name 和 user.email 决定,不是登录账号,也不是 GitHub 昵称。
- 多人共用一台机器时,
git config --global user.name没及时切人,会导致 A 的提交记成 B 的名字 - CI/CD 流水线提交(比如 Dependabot、Renovate)通常用机器人邮箱,不会出现在人工统计里,但它们的代码行数真实存在
- 用
git rebase -i修改过提交历史后,author 可能被覆盖,尤其fixup或squash操作默认继承第一个提交的 author - 查证方式:
git log -1 --pretty=format:"%an " <commit-hash></commit-hash>,比对邮箱是否符合预期
真要准,得先统一配置、禁用共享全局 config、CI 提交单独归类——这些事比写统计命令还花时间。










