跳到正文

提交前钩子

Pre-commit Hook

中级通用

提交前钩子(Pre-commit Hook)是 Git 在创建提交前自动运行的本地脚本。它能在代码进入提交历史前发现常见问题,例如检查暂存的文件是否符合格式要求;检查失败时,这次提交会中止。

你可能会说:「我想在提交代码时自动检查格式和明显错误,有问题就先别生成提交。」

读之前建议先了解

动手看看

main当前所在 HEAD登录页初版main · HEAD
1

登录页初版已经提交在 main 上。本地配置了提交前钩子,会在每次创建提交前检查暂存内容。

本地钩子

钩子:.git/hooks/pre-commit
检查:git diff --cached --check

要点

  1. 1

    它在提交生成前运行检查

    你执行 Git 提交时,Git 会先运行已配置的提交前钩子。脚本成功结束,提交流程才继续;脚本报错,提交就停下。你可以借这个时机检查代码,而不是等提交完成后再补救。

  2. 2

    检查范围要对准暂存内容

    一次提交收进去的是暂存区的内容,不一定是你工作区里看到的最新版。所以检查工具最好针对本次暂存的文件或内容运行;否则你可能检查通过了工作区,却把另一版内容提交进去。

  3. 3

    自动修改后还要确认提交内容

    钩子可以调用格式化、规范检查等工具。如果工具改了文件,你要确认改动是否已进入暂存区,再决定是否重新提交。钩子运行前后都看一眼本次差异,比只看“检查通过”更稳妥。

容易混淆的地方

提交前钩子是触发时机和执行入口,格式化、代码规范检查是它可以调用的具体工具。它通常在你的本机运行,不能代替持续集成:团队成员可能没有安装相同钩子,也可能跳过它。持续集成在代码推送后由统一环境检查,更适合作为团队共同的质量门禁。

什么时候用

适合用

  • 做网站时,希望每次提交前检查本次改动的代码格式,减少合并请求里的格式噪声。
  • 和 AI Agent 协作改后台接口时,想在提交前快速运行规范检查,及早发现明显错误。
  • 团队约定提交中不能带入某类临时文件,想在本地提交阶段及时提醒开发者。

不适合用

  • 想确保所有合并请求都通过同一套测试时,改用持续集成;本地钩子无法保证每个人都会运行。
  • 想每晚定时扫描整个仓库的依赖问题时,改用定时任务;这件事不需要等开发者提交代码。
  • 检查必须连接预发布环境、运行时间也较长时,放到持续集成里更合适,别让每次本地提交都等待它。

练一练

你让 AI Agent 修改了一个网站组件,只暂存了其中两个文件,想在每次提交前检查这次提交的代码格式。哪种做法最贴合需求?

让 AI 帮你做

请为这个 Git 仓库配置提交前钩子:每次提交前,对本次暂存的相关代码运行项目已有的格式和规范检查;检查失败时中止提交并显示原因。先查看现有工具与配置,避免重复引入依赖,并说明自动修改文件后如何确认暂存内容。

接下来学什么