如何过滤git log --numstat中修改大量文件的提交?
解决git log过滤修改大量文件提交的方法
你可以通过把git log --numstat的输出管道给awk脚本,过滤掉修改文件数超过指定阈值的提交,具体命令如下:
git log --numstat | awk ' BEGIN { commit_line = ""; file_count = 0 } /^commit / { if (commit_line != "" && file_count < 7000) { print commit_line print body } commit_line = $0 body = "" file_count = 0 next } /^[0-9-]/ { file_count++ next } { body = body $0 "\n" } END { if (commit_line != "" && file_count < 7000) { print commit_line print body } } '
这个脚本的逻辑是:
- 识别每个提交的起始行(以
commit开头) - 统计该提交对应的修改文件数量(通过
--numstat输出中带数字的行计数) - 只输出修改文件数小于7000的提交完整信息
如果需要调整阈值,把脚本里的7000改成你想要的数字即可。
要是你只需要看提交哈希和基本提交信息,不需要详细的文件统计,也可以用更直观的方法:
git log --format="%H %s" | while read hash msg; do file_count=$(git diff --name-only $hash^! | wc -l) if [ $file_count -lt 7000 ]; then echo "$hash $msg" fi done
这个方法会逐个提交计算修改文件数,虽然速度稍慢,但逻辑更容易理解。
内容的提问来源于stack exchange,提问作者Kees Kist
相关产品推荐
相关产品推荐

