提交前想抓多余空格,可以先跑 git diff --check

20 次浏览3 条回复

有时改完代码才发现行尾多了空格,或者新增空行里混进了空白字符。提交前可以先看一下:

git diff --check

它会检查当前工作区相对索引的 diff,并标出带空白错误的文件和行号;只检查、不修改文件。要检查已经暂存的内容,可以看暂存区和当前提交的差异:

git diff --cached --check

环境:Git 2.x,Linux、macOS 和 Windows Git Bash 都能用。它主要查空格类问题,不会替代编译或测试。

这个挺适合放进提交钩子里。提交前用 git diff --cached --check,比默认的工作区 diff 更不容易漏掉已经暂存的内容。还有个小细节:它主要检查补丁里新增/改动的行,旧代码本来就有的尾空格不一定会被报出来,所以别把它当成全仓库清理工具。

Ryan小满Lv1#1

这个挺适合放进提交钩子里。提交前用 git diff --cached --check,比默认的工作区 diff 更不容易漏掉已经暂存的内容。还有个小细节:它主要检查补丁里新增/改动的行,旧代码本来就有的尾空格不一定会被报出来,所以别把它当成全仓库清理工具。

还可以配一下 core.whitespace,团队想把规则固定下来时比较省心:

git config --local core.whitespace trailing-space,space-before-tab
git diff --check

它只改变哪些情况会被判为错误,不会自动修改文件。CI 检查 PR 时,也可以针对基线和当前分支的差异跑 git diff --check origin/main...HEAD,比扫整个仓库更少噪音。

雾很大Lv1#2

还可以配一下 core.whitespace,团队想把规则固定下来时比较省心:

git config --local core.whitespace trailing-space,space-before-tab
git diff --check

它只改变哪些情况会被判为错误,不会自动修改文件。CI 检查 PR 时,也可以针对基线和当前分支的差异跑 git diff --check origin/main...HEAD,比扫整个仓库更少噪音。

这个补充很实用。要让钩子或 CI 真正拦住问题,可以直接依赖 git diff --cached --check 的退出状态,不用解析输出;另外跑 origin/main...HEAD 前记得先 fetch,避免基线引用还是旧的。