提交前钩子
Pre-commit Hook
中级通用提交前钩子(Pre-commit Hook)是 Git 在创建提交前自动运行的本地脚本。它能在代码进入提交历史前发现常见问题,例如检查暂存的文件是否符合格式要求;检查失败时,这次提交会中止。
你可能会说:「我想在提交代码时自动检查格式和明显错误,有问题就先别生成提交。」
动手看看提交登录按钮文案
1
登录页初版已经提交在 main 上。本地配置了提交前钩子,会在每次创建提交前检查暂存内容。
本地钩子
钩子:.git/hooks/pre-commit 检查:git diff --cached --check
要点提交前钩子在提交时做了什么?
- 1
它在提交生成前运行检查
你执行 Git 提交时,Git 会先运行已配置的提交前钩子。脚本成功结束,提交流程才继续;脚本报错,提交就停下。你可以借这个时机检查代码,而不是等提交完成后再补救。
- 2
检查范围要对准暂存内容
一次提交收进去的是暂存区的内容,不一定是你工作区里看到的最新版。所以检查工具最好针对本次暂存的文件或内容运行;否则你可能检查通过了工作区,却把另一版内容提交进去。
- 3
自动修改后还要确认提交内容
钩子可以调用格式化、规范检查等工具。如果工具改了文件,你要确认改动是否已进入暂存区,再决定是否重新提交。钩子运行前后都看一眼本次差异,比只看“检查通过”更稳妥。
容易混淆的地方
提交前钩子是触发时机和执行入口,格式化、代码规范检查是它可以调用的具体工具。它通常在你的本机运行,不能代替持续集成:团队成员可能没有安装相同钩子,也可能跳过它。持续集成在代码推送后由统一环境检查,更适合作为团队共同的质量门禁。
什么时候用
适合用
- 做网站时,希望每次提交前检查本次改动的代码格式,减少合并请求里的格式噪声。
- 和 AI Agent 协作改后台接口时,想在提交前快速运行规范检查,及早发现明显错误。
- 团队约定提交中不能带入某类临时文件,想在本地提交阶段及时提醒开发者。
不适合用
- 想确保所有合并请求都通过同一套测试时,改用持续集成;本地钩子无法保证每个人都会运行。
- 想每晚定时扫描整个仓库的依赖问题时,改用定时任务;这件事不需要等开发者提交代码。
- 检查必须连接预发布环境、运行时间也较长时,放到持续集成里更合适,别让每次本地提交都等待它。
练一练选一个答案,看看解释
你让 AI Agent 修改了一个网站组件,只暂存了其中两个文件,想在每次提交前检查这次提交的代码格式。哪种做法最贴合需求?
让 AI 帮你做复制给 AI Agent 直接用
请为这个 Git 仓库配置提交前钩子:每次提交前,对本次暂存的相关代码运行项目已有的格式和规范检查;检查失败时中止提交并显示原因。先查看现有工具与配置,避免重复引入依赖,并说明自动修改文件后如何确认暂存内容。