如何统计Git合并中新增/修改的代码行数(忽略删除行)
如何统计Git合并中新增/修改的代码行数(忽略删除行)
嘿,这个问题我之前在项目迭代里也碰到过!要统计Git合并操作里新增/修改的代码行数、同时忽略删除的内容,其实用Git自带的命令就能轻松搞定,不用额外装工具,我给你分享几个实用的方法:
1. 针对已完成的合并提交统计
如果已经完成了合并,想回溯统计这个合并提交带来的新增/修改行数,可以用下面的命令:
git diff <merge-commit-hash>^1 <merge-commit-hash> --diff-filter=AM --shortstat
给你拆解下参数:
<merge-commit-hash>:替换成你要统计的合并提交的哈希值,用git log就能查到(找带Merge标记的提交)^1:指合并提交的第一个父分支(通常是你合并进去的目标分支,比如main/master),如果要对比被合并的分支就用^2--diff-filter=AM:只筛选**新增(Added)和修改(Modified)**的文件,删除的文件会直接被排除--shortstat:输出简洁的统计结果,比如10 files changed, 65 insertions(+),自动忽略删除行的统计
举个实际例子,假设合并提交的哈希是abc123,命令就是:
git diff abc123^1 abc123 --diff-filter=AM --shortstat
如果想要每个文件的详细行数统计(比如看单个文件新增了多少行),把--shortstat换成--numstat就行:
git diff abc123^1 abc123 --diff-filter=AM --numstat
输出会是类似这样的格式:
20 5 src/utils.js 15 0 src/new-feature.js
第一列是新增行数,第二列是删除行数(我们可以直接忽略第二列)。
2. 预览待合并分支的新增/修改行数
如果还没执行合并,想提前看看待合并分支会带来多少新增/修改代码,直接对比目标分支和待合并分支即可:
git diff main..feature-branch --diff-filter=AM --shortstat
这里main是你的目标分支,feature-branch是要合并的分支,替换成你实际的分支名就行。
3. 进阶:只统计新增总行数(忽略修改中的删除行)
如果想更精准地统计所有新增的行数(包括修改文件里的新增部分,完全忽略任何删除的行),可以用awk命令提取求和:
git diff <merge-commit-hash>^1 <merge-commit-hash> --diff-filter=AM --numstat | awk '{sum += $1} END {print "Total added/edited lines: " sum}'
这个命令会自动把所有新增行数加总,输出一个最终的数字。
小技巧:排除特定文件
如果不想统计配置文件、日志这类非业务代码,可以用:!排除指定文件:
git diff abc123^1 abc123 --diff-filter=AM --shortstat ':!*.json' ':!*.log'
上面的命令会排除所有.json和.log文件的统计。
这些方法应该能完美解决你的需求啦,要是有其他细节问题随时问!
备注:内容来源于stack exchange,提问作者Nick




