提交前发现空白字符问题,可以先跑 git diff --check

48 次浏览4 条回复

有些 CI 报错只是行尾空格、文件末尾缺换行这类小问题,肉眼看 diff 不太容易发现。提交前可以先跑:

git diff --check

它会检查当前未提交改动里的空白字符错误和冲突标记,发现问题时会给出文件和行号。只想检查已经暂存的内容,可以用:

git diff --cached --check

环境:Git 2.25+。这个命令只检查,不会自动修改文件;如果项目有生成文件或特殊格式,最好结合仓库现有的格式化规则一起判断。

补一个容易踩的点:如果平时用 git diff --cached --check 检查暂存区,修完后要重新执行 git add,不然检查到的还是旧内容。想让 diff 里的空白问题更醒目,也可以试试 git diff --check --ws-error-highlight=all。

这个很适合放进 CI。git diff --check 出现问题时会返回非 0,直接作为一步检查就行;PR 场景也可以比较合并基线和当前提交:

git diff --check origin/main...HEAD

这样不用依赖本地工作区是否还有未提交改动。分支基线名按项目实际配置替换,生成目录则要先确认是否应该纳入检查。

隔壁空白Lv1#2

这个很适合放进 CI。git diff --check 出现问题时会返回非 0,直接作为一步检查就行;PR 场景也可以比较合并基线和当前提交:

git diff --check origin/main...HEAD

这样不用依赖本地工作区是否还有未提交改动。分支基线名按项目实际配置替换,生成目录则要先确认是否应该纳入检查。

还要注意它检查的是 diff 里的新增/改动行,不是把整个仓库所有历史文件扫一遍。要做全文件空白审计,得配合项目自己的 lint 或格式化检查;否则一处没改到的旧问题不会被这条命令报出来。

还有个小区别:git diff --check HEAD~1 HEAD 检查的是两个提交之间的改动,适合在提交钩子或 CI 里固定检查范围;不带范围时默认看工作区,容易和暂存区的结果混淆。项目如果允许 CRLF,也要先确认 core.whitespace 和仓库的换行约定,别把格式策略误当成代码问题。