提交前用 git diff --check 抓空白问题

28 次浏览3 条回复

有些 CI 会因为行尾空格、混用缩进或冲突标记直接失败,提交前可以先跑一下:

环境:Git 2.25+,在项目根目录执行。

git diff --check

# 如果想检查已暂存的内容
git diff --cached --check

没问题时基本没有输出;如果有问题,会打印文件名和行号,比如 trailing whitespace 或 leftover conflict marker。

这个命令只检查 diff,不会改文件。比较适合放在 commit 前手动跑一下,尤其是改了 Markdown、YAML、配置文件的时候。

这个命令还有个小细节挺实用:如果平时习惯先 git add 再检查,优先跑 git diff --cached --check,不然只看工作区 diff 可能漏掉已经暂存的内容。

它不会替代 formatter,像空行数量、换行风格这种还是交给 prettier、ruff format 之类更合适;但抓冲突标记和行尾空格确实很快。

也可以顺手放进 pre-commit hook 里,成本很低:

git diff --cached --check || exit 1

不过我会只拦已经暂存的内容,这样没暂存的临时改动不会影响提交。团队里如果已经有 lint-staged,也可以把它当成一个很早失败的小检查。

如果是在提交前想把暂存和未暂存的改动一起扫一遍,可以用 git diff --check HEAD;它比较的是当前工作区相对最近一次提交的差异。真正放进 pre-commit hook 时,还是用 git diff --cached --check 更合适,只拦这次准备提交的内容。