用 git diff --name-only --staged 先扫一眼提交文件

19 次浏览3 条回复

提交前想快速确认这次到底会带哪些文件,可以不用看完整 diff,先列文件名就行。

环境:Git 2.25+,在仓库根目录执行:

git diff --name-only --staged

它只看暂存区,也就是下一次 git commit 准备提交的内容。比如改了很多文件,但只想确认有没有把 .env、临时日志之类的东西手滑加进去,这条会比较直观。

如果还想顺便看改动类型,可以换成:

git diff --name-status --staged

输出里的 M、A、D 分别是修改、新增、删除。命令本身只读,不会改工作区;真正提交前再配合 git status 看一眼更稳。

这个命令很适合放在 commit 前最后瞄一眼。

如果只是担心暂存区里混进某类文件,也可以顺手配一下 grep,例如:

git diff --name-only --staged | grep -E '(^|/)\.env|\.log$'

没输出一般就说明暂存区里没匹配到这些文件。注意这里只是过滤文件名,不会改暂存区。

还有个小用法我觉得也挺搭:如果想确认某个目录这次有没有进提交,可以直接加路径过滤:

git diff --name-only --staged -- src/ test/

这样只列暂存区里这两个目录相关的文件。参数里的 -- 主要是把路径和前面的选项隔开,文件名比较奇怪时也少点歧义。

补一个过滤改动类型的小参数:只想看这次新增了哪些文件,可以这样:

git diff --name-only --staged --diff-filter=A

如果是只看删除的文件就把 A 换成 D。我一般在提交前排一下新增文件,比较容易发现手滑加进去的临时文件。