Git:只想看改了哪些文件,`git diff --name-only` 挺省事

35 次浏览3 条回复

有时候还没准备细看每一行 diff,只想先知道这次动了哪些文件,可以用 git diff --name-only 先扫一眼。

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

mkdir git-diff-name-only-demo && cd git-diff-name-only-demo
git init
printf 'one\n' > a.txt
printf 'two\n' > b.txt
git add .
git commit -m 'init'

printf 'one changed\n' > a.txt
printf 'three\n' > c.txt

git diff --name-only

这时一般只会看到:

a.txt

因为 c.txt 还没被 Git 跟踪。想把已暂存的也看一下,可以用:

git add c.txt
git diff --name-only --cached

我觉得它适合提交前先确认影响范围。真要看内容,再换 git diff 慢慢看。

这个我也觉得很适合先扫范围。

如果想顺便知道是新增、修改还是删除,可以换成:

git diff --name-status
git diff --name-status --cached

输出前面的 A/M/D 有时候比纯文件名多一点点信息,但又不会像完整 diff 那么吵。

还有个小搭配是 git diff --stat,想看哪些文件动得多一点时挺直观。

比如提交前我会先看文件名范围,再用 stat 扫一眼有没有某个文件行数变化特别夸张。它不展开具体内容,但能提醒自己别漏掉大改动。

我还会偶尔配个 --diff-filter 用,尤其是只想找新加文件的时候:

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

MD 也能换着用。提交前排除那种误删文件时,这个比在一长串文件名里肉眼找舒服一点。