如何按日期统计Git中每个提交者的增删行数汇总
按作者、提交时间汇总Git提交的增删总行数
解决方案命令
直接使用以下命令即可生成你需要的CSV格式统计结果,支持所有作者的提交数据:
git log --date=iso --numstat \ --pretty=format:'START,%ad,%aN' \ | awk ' BEGIN { FS=","; OFS="," } /^START/ { if (commit_date != "") { print author, commit_date, add_total, del_total } commit_date = $2 author = $3 add_total = 0 del_total = 0 next } { add = ($1 == "-") ? 0 : $1 del = ($2 == "-") ? 0 : $2 add_total += add del_total += del } END { if (commit_date != "") { print author, commit_date, add_total, del_total } } '
命令说明
Git Log 部分
--date=iso:输出ISO标准格式的提交时间(如2024-08-20 14:10:15)--numstat:输出每个提交中各文件的新增行数、删除行数及文件名--pretty=format:'START,%ad,%aN':为每个提交的开头添加START标记,同时输出提交时间和作者,方便awk识别提交边界
Awk 处理部分
- 识别
START开头的行作为新提交的起始点,重置累加器并记录当前提交的时间和作者 - 处理
numstat输出的文件行:自动处理-(表示无对应行数,如删除文件时新增行数为-),将其转为0后累加新增、删除总行数 - 每个提交处理完成后输出统计结果,最后在END块输出最后一个提交的统计
- 识别
过滤特定作者
如果需要只统计某个作者的提交,只需在git log后添加--author="目标作者"参数即可,例如:
git log --date=iso --numstat \ --pretty=format:'START,%ad,%aN' \ --author="some_author" \ | awk ' BEGIN { FS=","; OFS="," } /^START/ { if (commit_date != "") { print author, commit_date, add_total, del_total } commit_date = $2 author = $3 add_total = 0 del_total = 0 next } { add = ($1 == "-") ? 0 : $1 del = ($2 == "-") ? 0 : $2 add_total += add del_total += del } END { if (commit_date != "") { print author, commit_date, add_total, del_total } } '
内容的提问来源于stack exchange,提问作者qwer
相关产品推荐
相关产品推荐

