Git怎么统计代码提交行数_Git如何查看每个人的代码贡献量【命令】

老丽吖_6144

老丽吖_6144

2026-03-22

775人浏览

原创

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

git怎么统计代码提交行数_git如何查看每个人的代码贡献量【命令】

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 次提交全在重构核心模块。

openclaw-gitcode-pr-monitor
openclaw-gitcode-pr-monitor

监控一个或多个 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 提交单独归类——这些事比写统计命令还花时间。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

git

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1118

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1669

3

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.06.27

1211

7

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

2023.06.20

708

5

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.28

1009

10

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

2026.01.21

8405

27

GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

2026.04.02

838

19

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

2023.07.05

5779

9

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

2023.07.06

1720

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.9万人学习