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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:06:29