You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计Git项目中所有文件的修订次数?有无对应Git命令?

没问题,这其实是Git里挺实用的一个统计需求,我来给你几个靠谱的解决方案,完全满足你统计所有作者修改次数、输出「次数 文件名」格式的要求:

方法1:快速统计文件修改提交次数

直接在项目根目录运行这条命令,它会遍历所有分支的所有提交,统计每个文件被修改的提交次数(包含所有作者的操作):

git log --all --numstat | awk '{if ($1 != "" && $2 != "") {count[$3]++}} END {for (file in count) print count[file], file}' | sort -nr

拆解一下各部分的作用:

  • git log --all:遍历仓库所有分支的所有提交,不会漏掉任何历史记录
  • --numstat:输出每个提交中文件的增删行数,格式为「新增行数 删除行数 文件名」
  • awk脚本:过滤掉日志里的空行,累加每个文件在提交中出现的次数(也就是被修改的次数)
  • sort -nr:按修改次数从多到少排序,方便快速定位最常改动的文件

如果你想统计的是文件累计的增删行数总和,而不是提交次数,可以把awk部分改成这样:

git log --all --numstat | awk '{if ($1 != "" && $2 != "") {sum[$3] += $1 + $2}} END {for (file in sum) print sum[file], file}' | sort -nr
方法2:处理文件重命名的精确统计

如果你的项目里存在文件重命名的情况,方法1会把重命名前后的文件当成两个独立文件统计。用下面的命令可以识别文件的历史轨迹,把重命名前后的修改次数合并:

git rev-list --all | xargs -I {} git diff --name-only {} ^{} | awk '{count[$1]++} END {for (file in count) print count[file], file}' | sort -nr

简单说明:

  • git rev-list --all:列出仓库所有提交的哈希值
  • xargs + git diff:逐个对比每个提交和它的父提交,提取出本次提交修改过的文件
  • awk统计每个文件的修改次数,这样重命名后的文件会继承之前的修改记录

以上所有命令都会统计所有作者的修改操作,不需要额外指定作者范围,完全符合你的需求。

内容的提问来源于stack exchange,提问作者OvidiuPPP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:25:28