Claude Code | | 约 20 分钟 | 7,781 字

Claude Code Git 工作流深度集成

从分支管理到 PR 审查,Claude Code 与 Git 的无缝协作

Claude Code 与 Git 的关系

Claude Code 天生就是一个 Git-aware 的工具。它能读取 git 状态、理解分支结构、生成 commit message、创建 PR——几乎覆盖了日常 Git 工作流的所有环节。

但很多人只是用它来写代码,忽略了它在版本控制方面的强大能力。今天我们来系统地看看,如何让 Claude Code 和 Git 深度协作。


基础 Git 操作

查看状态

Claude Code 可以直接理解 git 状态:

帮我看看当前的 git 状态,有哪些文件被修改了?

它会执行 git statusgit diff 等命令,然后用人类可读的方式告诉你:

当前在 feature/add-search 分支,有 3 个文件被修改:
1. src/components/Header.astro - 添加了搜索框
2. src/pages/search.astro - 新文件,搜索页面
3. src/utils/search.ts - 新文件,搜索逻辑

还没有暂存任何文件。

智能 Commit

这是 Claude Code 最实用的 Git 功能之一——根据代码变更自动生成 commit message:

帮我提交当前的修改

Claude Code 会:

  1. 运行 git diff 分析变更内容
  2. 理解变更的语义(是新功能、修复、重构还是文档?)
  3. 生成符合 Conventional Commits 规范的 message
  4. 执行 git addgit commit
# Claude Code 生成的 commit message 示例
feat(search): add full-text search with fuzzy matching

- Add search page with real-time filtering
- Implement Fuse.js-based fuzzy search
- Add search icon to header navigation

在 CLAUDE.md 中定义 Commit 规范

如果你的团队有特定的 commit 规范,写在 CLAUDE.md 里:

## Git 约定

### Commit Message 格式
遵循 Conventional Commits:
- feat: 新功能
- fix: 修复 Bug
- docs: 文档变更
- style: 代码格式(不影响功能)
- refactor: 重构
- test: 测试相关
- chore: 构建/工具变更

### 示例

feat(auth): add OAuth2 login support fix(api): handle null response from user endpoint docs(readme): update installation instructions


### 规则
- subject 不超过 50 字符
- body 每行不超过 72 字符
- 使用英文撰写
- 使用祈使语气(add 而非 added)

分支管理

创建功能分支

创建一个新分支来实现用户搜索功能

Claude Code 会根据你的分支命名约定创建分支:

git checkout -b feature/user-search

分支切换与上下文保持

Claude Code 在切换分支时会自动感知上下文变化:

切换到 develop 分支,看看和 main 有什么差异
git checkout develop
git log main..develop --oneline

分支清理

帮我清理已经合并的本地分支
# Claude Code 会执行类似这样的操作
git branch --merged main | grep -v "main\|develop" | xargs git branch -d

PR 创建与审查

创建 Pull Request

Claude Code 可以通过 gh CLI 创建 PR:

帮我创建一个 PR,把当前分支合并到 main

Claude Code 会:

  1. 分析当前分支的所有 commit
  2. 生成 PR 标题和描述
  3. 使用 gh pr create 创建 PR
gh pr create \
  --title "feat: add full-text search functionality" \
  --body "## Changes
- Add search page with real-time filtering
- Implement Fuse.js-based fuzzy search
- Add search icon to header navigation

## Testing
- [x] Search returns relevant results
- [x] Fuzzy matching works for typos
- [x] Empty state handled correctly" \
  --base main

审查 Pull Request

这是一个非常强大的功能——让 Claude Code 帮你审查 PR:

帮我审查 PR #42

Claude Code 会:

  1. 获取 PR 的 diff
  2. 逐文件分析变更
  3. 指出潜在问题
  4. 给出改进建议
# 获取 PR 信息
gh pr view 42
gh pr diff 42

PR 模板集成

.github/pull_request_template.md 中定义模板,Claude Code 创建 PR 时会自动遵循:

## 变更说明
<!-- 描述这个 PR 做了什么 -->

## 变更类型
- [ ] 新功能
- [ ] Bug 修复
- [ ] 重构
- [ ] 文档更新

## 测试
- [ ] 单元测试通过
- [ ] 手动测试通过

## 截图(如果有 UI 变更)

## 相关 Issue
Closes #

合并冲突解决

合并冲突是开发中最头疼的问题之一。Claude Code 可以帮我们智能解决:

基本流程

帮我解决当前的合并冲突

Claude Code 会:

  1. 运行 git status 找到冲突文件
  2. 读取冲突内容
  3. 理解双方的修改意图
  4. 智能合并,保留两边的有效变更

实际示例

假设 src/utils/format.ts 有冲突:

<<<<<<< HEAD
export function formatDate(date: Date): string {
  return date.toLocaleDateString('zh-CN', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  });
}
=======
export function formatDate(date: Date, locale: string = 'en-US'): string {
  return date.toLocaleDateString(locale, {
    year: 'numeric',
    month: 'short',
    day: 'numeric'
  });
}
>>>>>>> feature/i18n

Claude Code 会分析:

  • HEAD 分支:使用中文格式,月份用 long
  • feature/i18n 分支:添加了 locale 参数,月份用 short

合并结果:

export function formatDate(date: Date, locale: string = 'zh-CN'): string {
  return date.toLocaleDateString(locale, {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  });
}

保留了 i18n 分支的 locale 参数,同时保持了中文作为默认值和 long 月份格式。

复杂冲突的处理策略

对于复杂冲突,可以给 Claude Code 更多上下文:

解决合并冲突。优先保留 feature/i18n 分支的改动,
但确保中文本地化不受影响。

Git Hooks 集成

Claude Code 的 Hooks 系统可以和 Git Hooks 配合使用:

pre-commit 检查

#!/bin/bash
# .git/hooks/pre-commit
# 在 commit 前运行 lint 和类型检查

# Lint 检查
npx eslint --quiet $(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(ts|tsx)$')
if [ $? -ne 0 ]; then
  echo "ESLint 检查失败,请修复后再提交"
  exit 1
fi

# 类型检查
npx tsc --noEmit
if [ $? -ne 0 ]; then
  echo "TypeScript 类型检查失败"
  exit 1
fi

commit-msg 规范检查

#!/bin/bash
# .git/hooks/commit-msg
# 检查 commit message 是否符合 Conventional Commits

COMMIT_MSG=$(cat "$1")
PATTERN="^(feat|fix|docs|style|refactor|test|chore|perf|ci|build|revert)(\(.+\))?: .{1,50}"

if ! echo "$COMMIT_MSG" | grep -qE "$PATTERN"; then
  echo "Commit message 不符合 Conventional Commits 规范"
  echo "格式:type(scope): subject"
  echo "示例:feat(auth): add login page"
  exit 1
fi

Claude Code Hooks + Git Hooks 联动

在 Claude Code 的 PostToolUse Hook 中触发 Git 操作:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hook": {
          "type": "command",
          "command": "bash .claude/hooks/auto-stage.sh"
        }
      }
    ]
  }
}
#!/bin/bash
# .claude/hooks/auto-stage.sh
# 编辑文件后自动暂存
FILE="$CLAUDE_FILE_PATH"
if [ -n "$FILE" ] && [ -f "$FILE" ]; then
  git add "$FILE"
fi

Worktree 的使用

Git Worktree 让我们可以同时在多个分支上工作,Claude Code 对此有原生支持。

什么时候用 Worktree

  • 需要同时处理多个功能分支
  • 在修复 Bug 时不想 stash 当前工作
  • 需要对比不同分支的实现

基本用法

# 创建 worktree
git worktree add ../my-project-feature feature/search

# 在 worktree 中启动 Claude Code
cd ../my-project-feature
claude

Claude Code 中的 Worktree

在 Claude Code 中可以直接请求使用 worktree:

在一个新的 worktree 中修复 issue #23

Claude Code 会:

  1. 创建新的 worktree
  2. 切换到对应分支
  3. 在隔离环境中工作
  4. 完成后提示是否保留 worktree

高级技巧

1. 交互式 Rebase 辅助

虽然 Claude Code 不能直接执行交互式 rebase,但它可以帮你规划:

我有 5 个 commit,帮我规划一下怎么 squash 和 reorder
建议的 rebase 计划:

1. pick abc1234 feat: add search component
2. squash def5678 fix: search component typo
   → 合并到上一个 commit,因为是同一功能的修复
3. pick ghi9012 feat: add search API endpoint
4. pick jkl3456 test: add search tests
5. drop mno7890 wip: debugging search
   → 删除这个 WIP commit

执行命令:
git rebase -i HEAD~5
然后按上述计划修改。

2. Git Bisect 辅助

用 Claude Code 帮你定位引入 Bug 的 commit:

最近的构建失败了,帮我用 git bisect 找到引入问题的 commit。
已知 v1.2.0 是好的,当前 HEAD 是坏的。
git bisect start
git bisect bad HEAD
git bisect good v1.2.0
# Claude Code 会在每个 bisect 步骤中帮你判断好坏

3. 变更日志生成

根据最近 10 个 commit 生成 CHANGELOG
git log --oneline -10

Claude Code 会生成结构化的变更日志:

## v1.3.0 (2026-03-11)

### New Features
- Add full-text search with fuzzy matching (#42)
- Add dark mode toggle (#38)

### Bug Fixes
- Fix pagination on category pages (#41)
- Fix image lazy loading on Safari (#39)

### Documentation
- Update API documentation (#40)

4. 多仓库协调

如果你的项目涉及多个仓库:

我需要同时更新 frontend 和 backend 仓库的 API 接口,
帮我协调两边的改动。

Claude Code 可以在不同目录间切换,确保前后端的接口定义一致。


最佳实践清单

实践说明
在 CLAUDE.md 中定义 Git 约定让 Claude Code 遵循团队规范
使用 Conventional Commits便于自动生成 changelog
小步提交让 Claude Code 每完成一个小功能就提交
提交前审查 diff让 Claude Code 在提交前展示变更摘要
使用 PR 而非直接 push保留审查环节
保护 main 分支配置分支保护规则
定期清理分支让 Claude Code 帮你清理已合并的分支

常见问题

Q: Claude Code 会不会误操作 Git?

A: Claude Code 在执行破坏性 Git 操作(如 git reset --hardgit push --force)前会请求确认。在 CLAUDE.md 中可以明确禁止这些操作。

Q: 如何防止 Claude Code 提交敏感文件?

A: 确保 .gitignore 配置正确,同时在 CLAUDE.md 中注明:

## 安全规则
- 绝不提交 .env 文件
- 绝不提交包含 API Key 的文件
- 提交前检查 git diff,确认没有敏感信息

Q: Claude Code 生成的 commit message 质量如何?

A: 通常很好,因为它能理解代码变更的语义。但建议在 CLAUDE.md 中提供 commit message 的示例,让它更贴合团队风格。


Git 是开发者的时间机器,Claude Code 是这台时间机器的智能副驾驶。让它帮你管理分支、生成 commit、审查 PR,你就能把更多精力放在真正重要的事情上——写出好代码。

评论

加载中...

相关文章

分享:

评论

加载中...