title: Git 集成实战完全指南(七)Git 钩子自动化——pre-commit、pre-push 自动执行
date: 2026-07-10
category: AI 开发工具
tags: [Claude Code, Git, Hook, 自动化, pre-commit, pre-push]

Git 集成实战完全指南(七):Git 钩子自动化

在代码提交前自动检查规范、运行测试、生成文档——Git Hook 就是你的自动守门员。本篇教你用 Claude Code 配置和自动化 Git 钩子。

前言

Git Hook 是在 Git 操作的不同阶段自动触发的脚本。常见的钩子:

pre-commit   → 提交前执行(代码检查、格式校验)
prepare-commit-msg  → 生成提交信息前执行
commit-msg   → 提交信息确认后执行(检查格式)
post-commit  → 提交后执行(通知、备份)
pre-push     → 推送前执行(运行测试、检查分支)
pre-receive  → 服务端接收推送前执行

传统上,Hook 是 shell 脚本。但用 Claude Code,你可以用自然语言生成和维护这些 Hook。

一、Hook 的配置方式

1.1 本地 Hook(.git/hooks/)

# 在 .git/hooks/ 下创建脚本
# pre-commit 示例
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/bash
echo "运行 Lint 检查..."
cd frontend && pnpm exec eslint src/ --max-warnings=0
EOF
chmod +x .git/hooks/pre-commit

缺点:每个开发者都要手动配置,不随项目版本管理。

1.2 项目级 Hook(推荐)

使用 Husky 或 lint-staged 管理 Hook:

# 前端项目使用 Husky
cd frontend
npx husky-init && npm install
npx husky add .husky/pre-commit "npx lint-staged"

1.3 Claude Code 管理的 Hook

Claude Code 可以直接读写 Hook 文件,并通过 Skill 自动化配置。

二、常用 Hook 配置

2.1 pre-commit Hook

帮我配置 pre-commit Hook,提交前自动 Lint

Claude 生成 Hook 配置:

# 创建 .husky/pre-commit
mkdir -p .husky
cat > .husky/pre-commit << 'HOOK'
#!/bin/sh
.npmpkg/husky/init.sh

# 前端 Lint
cd frontend && npx lint-staged

# 后端 Checkstyle
cd asset-server && mvn checkstyle:check -q
HOOK
chmod +x .husky/pre-commit

同时生成 lint-staged.config.js

module.exports = {
  'src/**/*.{vue,ts,js}': ['eslint --fix', 'prettier --write'],
  'src/**/*.vue': ['stylelint --fix'],
  'src/**/*.{json,css}': ['prettier --write'],
}

2.2 commit-msg Hook

配置 commit-msg Hook,强制使用约定式提交

Claude 生成:

cat > .husky/commit-msg << 'HOOK'
#!/bin/sh
COMMIT_MSG=$(cat .git/COMMIT_EDITMSG)

# 检查是否符合 Conventional Commits 格式
if ! echo "$COMMIT_MSG" | grep -qE '^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .+'; then
  echo "❌ 提交信息不符合约定式提交格式"
  echo ""
  echo "正确格式:<type>(<scope>): <subject>"
  echo "示例:feat(user): 新增用户搜索功能"
  echo ""
  echo "type 可选值:feat, fix, docs, style, refactor, test, chore"
  exit 1
fi
HOOK
chmod +x .husky/commit-msg

2.3 pre-push Hook

配置 pre-push Hook,推送前运行测试

Claude 生成:

cat > .husky/pre-push << 'HOOK'
#!/bin/sh

echo "🚀 pre-push 检查..."

# 1. 检查是否在 main 分支直接推送
BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$BRANCH" = "main" ]; then
  echo "❌ 不允许直接向 main 分支推送代码"
  echo "请使用 Pull Request 流程"
  exit 1
fi

# 2. 运行前端测试
cd frontend
if ! pnpm test -- --run; then
  echo "❌ 前端测试失败,推送中止"
  exit 1
fi

# 3. 运行后端测试
cd ../asset-server
if ! mvn test -q; then
  echo "❌ 后端测试失败,推送中止"
  exit 1
fi

echo "✅ 所有检查通过,开始推送..."
HOOK
chmod +x .husky/pre-push

三、Hook 的自动化管理

3.1 用 Skill 管理 Hook

---
name: hook-manager
description: 管理和生成 Git Hook 配置
trigger: Hook, husky, pre-commit, pre-push, 钩子
---

# Git Hook 管理 Skill

## 角色定义

你是一个 Git Hook 配置专家。

## 支持的 Hook

| Hook | 触发时机 | 典型用途 |
|------|---------|---------|
| pre-commit | git commit 前 | Lint、格式检查 |
| commit-msg | commit msg 确认后 | 提交信息格式检查 |
| pre-push | git push 前 | 测试、安全检查 |
| post-commit | commit 后 | 通知、日志记录 |
| post-merge | merge 后 | 依赖安装、数据库迁移 |

## 常用配置模板

### 前端项目(Vue/React)
- pre-commit: eslint --fix + prettier
- commit-msg: conventional commits 检查
- pre-push: pnpm test + pnpm build

### 后端项目(Java/Spring Boot)
- pre-commit: checkstyle 检查
- pre-push: mvn test

### 全栈项目
- 分别对 frontend/ 和 backend/ 配置不同的 Hook

## 安装流程

1. 检测项目是否已安装 Husky
2. 如果没有,执行 npx husky-init
3. 生成对应的 Hook 脚本
4. 设置可执行权限
5. 测试 Hook 是否生效

3.2 一键安装所有 Hook

帮我把项目所有的 Git Hook 都配好

Claude 执行:

# 1. 检测项目类型
ls frontend/package.json asset-server/pom.xml 2>/dev/null

# 2. 安装 Husky(前端)
cd frontend
npx husky-init 2>/dev/null || echo "Husky already installed"

# 3. 生成所有 Hook
mkdir -p .husky

# pre-commit
cat > .husky/pre-commit << 'EOF'
#!/bin/sh
cd frontend && npx lint-staged
cd ../asset-server && mvn checkstyle:check -q
EOF

# commit-msg
cat > .husky/commit-msg << 'EOF'
#!/bin/sh
# Conventional Commits 检查
...
EOF

# pre-push
cat > .husky/pre-push << 'EOF'
#!/bin/sh
# 测试 + 安全检查
...
EOF

chmod +x .husky/*.sh

# 4. 验证
echo "✅ Git Hook 配置完成"
echo "   pre-commit:   Lint + Checkstyle"
echo "   commit-msg:   约定式提交检查"
echo "   pre-push:     测试 + 分支保护"

四、Hook 的测试与调试

4.1 测试 Hook

测试一下 pre-commit Hook 是否生效

Claude 执行:

# 修改一个文件但不提交
echo "// test" >> src/test.ts

# 手动触发 pre-commit
./.husky/pre-commit

4.2 临时禁用 Hook

先别跑 Hook,我急着提交

Claude 执行:

# 使用 --no-verify 跳过 Hook
git commit --no-verify -m "temp: 紧急修复"

⚠️ 提醒:跳过 Hook 有风险,建议仅在紧急情况下使用。

4.3 Hook 失败时查看日志

pre-commit 失败了,看看什么原因

Claude 执行:

# 查看 Hook 脚本的输出了
cat .git/logs/hooks/pre-commit 2>/dev/null || \
  echo "Hook 输出已在终端显示,请检查上面的错误信息"

五、Post-Merge Hook

5.1 自动安装依赖

merge 之后自动安装依赖

Claude 生成:

cat > .husky/post-merge << 'EOF'
#!/bin/sh
# 检测 package.json 是否变化
if git diff HEAD^1 HEAD --name-only | grep -q "package.json"; then
  echo "📦 package.json 有变更,安装依赖..."
  pnpm install
fi

# 检测 pom.xml 是否变化
if git diff HEAD^1 HEAD --name-only | grep -q "pom.xml"; then
  echo "📦 pom.xml 有变更,清理 Maven 缓存..."
  cd asset-server && mvn dependency:resolve -q
fi
EOF

5.2 自动执行数据库迁移

merge 后自动运行数据库迁移脚本
cat > .husky/post-merge << 'EOF'
#!/bin/sh
# 检查是否有新的迁移脚本
NEW_MIGRATIONS=$(git diff HEAD^1 HEAD --name-only -- migrations/ | wc -l)
if [ "$NEW_MIGRATIONS" -gt 0 ]; then
  echo "📦 发现 $NEW_MIGRATIONS 个新的数据库迁移脚本"
  echo "是否执行数据库迁移?(y/N)"
  read -r answer
  if [ "$answer" = "y" ]; then
    flyway migrate
  fi
fi
EOF

六、这一章的核心心得

  1. Hook 是代码质量的守门员——在提交前拦截问题,比提交后发现成本低 10 倍
  2. Husky 是前端 Hook 的标准——配合 lint-staged 只检查暂存的文件,速度快
  3. commit-msg Hook 保证提交规范——约定式提交让 git log 可读
  4. pre-push Hook 防止烂代码上远程——测试不通过就不让 push
  5. post-merge Hook 自动化收尾工作——安装依赖、执行迁移
  6. Hook 可以临时跳过——--no-verify 紧急提交,但要慎用

七、下一步

Hook 配置好了,Git 操作也自动化了。最后一篇,我们学习 Git 的团队协作最佳实践——PR Review 流程、Code Review 规范、多人协作的 Git 策略。


系列目录:

  1. Claude Code 与 Git 的基础集成——自然语言操作 Git
  2. 智能分支管理——分支策略、自动创建、合并预防
  3. 自动化 Commit 与 PR——生成提交信息、创建 Pull Request
  4. Git 冲突解决——合并冲突的自动检测与修复
  5. Git Blame 与历史追踪——追溯代码变更的来龙去脉
  6. Git 标签与版本管理——Release 流程自动化
  7. Git 钩子自动化——pre-commit、pre-push 自动执行 ← 本篇
  8. Git 团队协作最佳实践——PR Review、Code Review 流程(待写)
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐