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

Git统计指定用户删除的文件数量及纯删除行数的方法

Git统计指定用户删除的文件数量及纯删除行数的方法

嗨,我完全懂你的困扰——用git log --shortstat统计的时候,文件移动会被误判成大量的插入和删除,导致统计出来的行数完全不准,对吧?下面给你两个针对性的解决方案,分别搞定统计删除的文件数量和统计真正被删除的行数这两个需求:

一、统计指定用户删除的文件数量

如果想统计这段时间里你真正删除了多少个文件(排除文件移动的干扰),可以用--diff-filter=D参数只筛选包含文件删除操作的提交,再结合--name-only输出文件名去重统计:

git log --since "Jan 1, 2022" --until "today" --author='Gilad Darmon <gilad.darmon@company.com>' --diff-filter=D --name-only | grep -v "^$" | sort | uniq | wc -l

参数解释:

  • --diff-filter=D:只保留包含文件删除操作的提交记录(排除移动、修改、新增等其他操作)
  • --name-only:只输出被删除的文件名
  • grep -v "^$":过滤掉输出中的空行
  • sort | uniq:对文件名去重(如果同一个文件被多次删除,只会统计一次;如果要统计所有删除操作的次数,去掉这部分即可)
  • wc -l:统计最终的文件数量

二、统计真正被删除的行数(排除文件移动的假删除)

原来的命令里,文件移动会被Git识别为“删除旧文件+新增新文件”,导致插入和删除行数虚高。要统计纯删除的行数,可以用两种方式:

方法1:禁用重命名识别,让移动文件不再干扰统计

给原来的命令加上--no-renames参数,Git就不会把文件移动识别为重命名,而是如实区分删除和新增,这样就能过滤掉移动带来的假删除数据:

git log --since "Jan 1, 2022" --until "today" --author='Gilad Darmon <gilad.darmon@company.com>' --no-renames --shortstat | grep "files changed" | awk '{files+=$1; inserted+=$4; deleted+=$6} END {print "files changed", files, "lines inserted:", inserted, "lines deleted:", deleted}'

方法2:只统计删除文件中的行数

如果只想统计那些被完全删除的文件里的行数(彻底删掉的文件,不是移动的),可以用--diff-filter=D结合--numstat来精准统计:

git log --since "Jan 1, 2022" --until "today" --author='Gilad Darmon <gilad.darmon@company.com>' --diff-filter=D --numstat | awk '{deleted+=$2} END {print "Total lines deleted (excluding file moves):", deleted}'

这个命令只会统计被删除文件中的行数,完全不会包含文件移动带来的虚高数据。

备注:内容来源于stack exchange,提问作者Gilad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:25:28