<p>用 git log 统计分支提交次数和代码行数需指定分支名,推荐 git rev-list --count main 和 git log --no-merges --shortstat 配合 awk 汇总增删行,注意时间、作者、路径过滤及 -- .src/ 格式避免统计偏差。</p>

怎么用 git log 统计某个分支的提交次数和代码行数
直接用 git log 配合 --oneline 和 --shortstat 就能拿到基础数据,但要注意默认只统计当前 HEAD 所在分支。如果想查 main 或 develop,得显式指定分支名:
-
git log --oneline main | wc -l:统计main分支提交总数(注意空行可能多算 1,可用git rev-list --count main更准) -
git log -p main | grep "^\+" | wc -l:粗略统计新增行(含空行和注释,不推荐) - 真正靠谱的是
git log --shortstat --no-merges main,它会输出每条提交的增删行数,再用awk汇总
为什么 git log --shortstat 的统计结果和 IDE 显示不一致
根本原因是 --shortstat 默认只统计「非合并提交」的改动,而 IDE(如 VS Code 的 GitLens)常把合并提交里的变更也摊到父提交里算。更麻烦的是,它对空格、换行符、二进制文件的处理方式不同。
- 加
--no-merges是为了排除纯合并提交(它们通常不带业务逻辑改动) - 如果想包含合并提交的 diff,得加
--cc或--combined,但输出格式会变,awk解析要重写 - 遇到
binary files differ时,--shortstat直接跳过该提交,不会报错也不会计入——这点容易被忽略
写一个可复用的统计脚本要注意哪些参数边界
实际用的时候,时间范围、作者过滤、文件路径限制这三项最容易漏掉,一不留神就统计了整个仓库历史。
Conventional Commits v1.0.0 分支、工作树命名及提交信息规范,适用于 GitHub 与 GitLab 项目,用于创建分支和命名工作树等场景。
- 按时间筛:用
--since="2024-01-01"和--until="2024-06-30",注意日期格式必须是 ISO 8601 或 Git 能解析的字符串 - 按作者筛:
--author="John Doe"匹配 commit author 字段,不是 committer;多人协作时建议用邮箱--author="john@example.com"更稳 - 按路径筛:
-- .src/(注意前面的点和空格)限定只统计子目录,否则git log默认遍历所有文件 - 性能提示:大仓库加
--quiet可跳过详细日志输出,只留统计信息,速度能快 3–5 倍
一行命令快速汇总并避免常见陷阱
下面这个命令能安全统计指定分支、时间段、路径下的净增删行数(不含合并、不含二进制):
git log --no-merges --shortstat --since="2024-01-01" --until="2024-06-30" --author="your@email.com" -- .src/ | awk '/files? changed/ {ins+=$1; del+=$3} END {print "add:" ins " del:" del}'关键点在于:结尾的 -- .src/ 不能漏,否则路径过滤失效;awk 中用 $1 和 $3 取值是因为 --shortstat 输出固定为 1 file changed, 5 insertions(+), 2 deletions(-) 这种结构;如果某次提交只删不增,$3 就是 0,不用额外判断。
真实项目里,.src/ 这种路径经常拼错成 src/ 或 ./src,导致统计结果偏大——这是最常被忽略的细节。

















