每次commit前总忘检查?我用3行代码自动完成

  • 约1238字
  • 技术
  • 2026年4月19日

每次commit前,你会不会也有这种经历?

代码改完了,信心满满地点击commit,结果刚推送出去,同事就跑来说:“你的代码格式不一样,lint报错了。“或者"测试用例怎么有一个没通过?”

你愣了一下:“我本地跑明明过了啊。“后来才发现,是自己忘了先跑lint,没跑测试。这种事发生一次两次还行,次数多了自己也不好意思。

我就是这么过来的。后来学了一招:用Git hooks配置自动检查,commit前自动跑lint和测试,不通过就不让提交。3行代码配置好,从此告别手动检查。

1. 先搞懂hooks是什么

Git hooks是Git提供的钩子脚本,在git命令执行前后自动运行。你可以理解为"触发器”——比如每次commit之前,Git会先问一声:“要执行pre-commit脚本吗?”

项目初始化后,hooks脚本藏在.git/hooks/目录下,里面有一堆示例文件,后缀是.sample。你把后缀去了,脚本就会生效。

今天要用的是pre-commit这个钩子——commit之前运行。

2. 3行代码配置自动检查

最基础的配置,3行就够:

# 1. 进入项目hooks目录
cd .git/hooks

# 2. 创建pre-commit脚本
cat > pre-commit << 'EOF'
#!/bin/sh
npm run lint
npm test
EOF

# 3. 加上执行权限
chmod +x pre-commit

解释一下:#!/bin/sh告诉系统用sh执行,npm run lintnpm test是你项目里本来就有的命令。这两个命令如果有一个返回非0状态码,commit就会被阻止。

3. 进阶:只检查改动的文件

上面那个配置会检查全部文件,项目大了会慢。进阶版只检查本次改动的文件:

#!/bin/sh

# 获取本次改动的文件
FILES=$(git diff --name-only --cached)

# 只对.js和.ts文件跑lint
for FILE in $FILES; do
  if echo "$FILE" | grep -q '\.(js|ts)$'; then
    npx eslint "$FILE"
  fi
done

这样只有改动的文件会被检查,速度快很多。

4. 进阶2:跳过检查的场景

有时候确实需要绕过检查强制提交,比如要赶紧修复线上bug:

# commit时加--no-verify参数,跳过hooks
git commit --no-verify -m "quick fix"

但这个命令最好少用,建议配个专门的分支用于紧急修复,平时不用。

5. 进阶3:给团队统一配置

上面是项目级别的配置,换个项目就没了。团队统一配置需要把hooks放到项目目录:

# 1. 创建hooks目录
mkdir -p .githooks

# 2. 把脚本放进去
cat > .githooks/pre-commit << 'EOF'
#!/bin/sh
npm run lint
npm test
EOF

# 3. 告诉Git用这个目录
git config core.hooksPath .githooks

这一步要交给Git处理,需要在.git/hooks/目录删除pre-commit文件,以免冲突。

团队新成员入职时,只需要跑一遍初始化脚本,或者直接在项目readme里说明。


配好这个之后,我的commit流程变成了这样:改完代码,git add .git commit -m "xxx",然后该跑的都自动跑了,没问题就提交成功,有问题就报错。

再也没出现过格式不过、测试不跑就提交的情况。

如果你也想试试,建议先从简单���lint检查开始,加上npm run test。等跑通了再加其他检查。

评论区聊聊,你们团队现在是怎么做提交前检查的?

相关文章

掌握Docker和k8s:利用容器技术提升开发效率

容器技术如 Docker 和 Kubernetes 已成为现代软件开发中的核心工具。通过利用这些技术,我们可以简化开发和部署流程,确保开发环境一致性,实现自动化部署,从而极大地提升开发效率。

查看更多

一个需求一套方案?AI让你不再纠结

需求评审时技术方案总是反复讨论、难以达成共识?本文分享如何用AI工具分钟级生成技术方案,包含具体提示词模板和实操步骤,帮助开发团队提升方案设计效率。

查看更多

从零开始:快速打造MVP产品的五大步骤

本文详细介绍了如何快速构建MVP产品的完整流程,从确定核心功能、快速开发,到快速上线、收集反馈与迭代优化。通过遵循这些步骤,可以高效验证市场需求,减少时间和资金浪费。

查看更多