如何让git status显示文件变更行数(类似git pull格式)
实现git status显示文件变更行数(含未跟踪文件)
核心思路
直接用git diff无法处理未跟踪文件,但可以通过git diff --no-index /dev/null <未跟踪文件>模拟出未跟踪文件的"新增"diff结果,再结合已跟踪文件的diff输出,统一传给diffstat生成行数统计。同时用diffstat的宽度参数解决换行错乱问题。
具体实现脚本
#!/bin/bash # 获取已跟踪文件的diff(暂存区+工作区) diff_output=$(git diff --cached) diff_output+="$(git diff)" # 获取未跟踪文件,逐个生成与空文件的diff untracked_files=$(git status --porcelain | grep '^??' | awk '{print $2}') for file in $untracked_files; do diff_output+="$(git diff --no-index /dev/null "$file")" done # 用diffstat指定宽度输出,$COLUMNS自动获取终端宽度 echo "$diff_output" | diffstat -w $COLUMNS
关键说明
git diff --no-index /dev/null <文件>:把未跟踪文件和空文件对比,相当于把整个文件内容标记为新增行,完美模拟未跟踪文件的变更统计,全程不会修改索引。diffstat -w $COLUMNS:强制diffstat输出适配当前终端宽度,避免换行错乱,也可以手动指定固定数值比如-w 80。- 脚本同时包含了暂存区(
--cached)和工作区的已跟踪文件变更,如果你只需要其中一种,去掉对应的git diff命令即可。
内容的提问来源于stack exchange,提问作者scarf
相关产品推荐
相关产品推荐

