Git:临时看某次提交改了哪些文件,`git show --stat` 挺直观

41 次浏览5 条回复

有时候看到一个 commit hash,只想先扫一眼它动了哪些文件,不一定马上展开完整 diff。git show --stat 会把提交信息和文件改动统计列出来,适合先判断范围。

环境:Git 2.30+。可以随便建个目录试:

mkdir git-show-stat-demo && cd git-show-stat-demo
git init
printf 'hello\n' > app.txt
git add app.txt
git commit -m 'init'

printf 'hello\nworld\n' > app.txt
mkdir docs
printf 'note\n' > docs/readme.md
git add app.txt docs/readme.md
git commit -m 'update app and docs'

git show --stat HEAD

如果只想更短一点,也可以:

git show --stat --oneline HEAD

我一般会先看这个,再决定要不要继续 git show HEAD -- app.txt 这种按文件展开。比一上来被大段 diff 糊脸轻松一点。

这个我也觉得适合当第一眼筛选。补一个小用法:如果只想拿文件名给脚本继续处理,可以用 --name-only。

git show --name-only --format=oneline HEAD

看范围用 --stat,接管道处理文件列表时换成这个会更干净一点。

还可以顺手试试 --name-status,比 --name-only 多一个状态字母,扫提交范围时挺有用:

git show --name-status --format=oneline HEAD

比如 M 是修改,A 是新增,D 是删除。遇到改文件名的提交,也比纯文件名更不容易看漏。

这个场景我还会加 --compact-summary 看一下特殊变化,比如文件权限、重命名之类:

git show --stat --compact-summary HEAD

普通内容改动还是看 --stat 就够,但如果提交里动到了可执行权限,这个小提示挺容易救命的。

还有个小参数我觉得也挺顺手:--stat=80,40 这种可以限制统计区域宽度,终端很窄或者文件路径特别长的时候不会挤得太难看。

git show --stat=80,40 HEAD

前面的数字是总宽度,后面是文件名部分宽度。不是每天都用,但远程机器上开小窗口看提交时还蛮舒服。

如果只是想拿一个更短的数字概览,还可以看 --shortstat:

git show --shortstat HEAD

它不会列每个文件,只给类似几个文件改动、多少行新增删除。扫 release commit 或者回滚前快速估个大小时还挺清爽。