第 4 章:核心功能

Git 工作流

版本控制是软件开发的基石,而 Git 则是这一领域的事实标准。然而,日常的 Git 操作——提交、分支管理、冲突解决、PR 创建——往往占据了开发者大量的心智带宽。Claude Code 将 Git 从一套需要记忆的命令集,转变为可以用自然语言直接操控的协作伙伴。它读取你的仓库状态、理解 diff 的语义、生成符合团队规范的提交信息,并能以对话方式解决合并冲突。本章将系统介绍如何利用 Claude Code 构建高效、低摩擦的 Git 工作流。

版本控制是软件开发的基石,而 Git 则是这一领域的事实标准。然而,日常的 Git 操作——提交、分支管理、冲突解决、PR 创建——往往占据了开发者大量的心智带宽。Claude Code 将 Git 从一套需要记忆的命令集,转变为可以用自然语言直接操控的协作伙伴。它读取你的仓库状态、理解 diff 的语义、生成符合团队规范的提交信息,并能以对话方式解决合并冲突。本章将系统介绍如何利用 Claude Code 构建高效、低摩擦的 Git 工作流。

1. 对话式 Git 操作

Claude Code 的 Git 集成并非简单地帮你生成命令供你复制粘贴,而是直接在你的终端中执行 Git 操作。当你启动 Claude Code 时,它会自动感知当前仓库的分支状态、未提交的变更和最近的提交历史,无需你手动运行 git status 或粘贴 diff。

1.1 查看当前变更

最基础的 Git 工作流始于了解"我改了什么"。Claude Code 支持多种自然语言提问方式来获取变更概览:

自然语言提问Claude 执行的操作输出内容
"我改了哪些文件?"git status + git diff --stat修改文件列表及每文件的增删行数
"show me the diff for src/auth.ts"git diff src/auth.ts该文件的详细 diff
"summarize my changes"git diff + 语义分析按功能区域分组的变更摘要
"what's staged vs unstaged?"git status --short已暂存与未暂存文件的分类列表
"compare this with main"git diff main...HEAD当前分支与 main 的完整差异

对话示例

User: what files have I changed?

Claude: 你当前修改了 7 个文件,分布在 3 个目录中:

  数据库层 (2 文件):
    - migrations/20250426_add_user_prefs.sql  (+45 行)
    - src/db/schema.ts                         (+12, -3 行)

  API 层 (3 文件):
    - src/api/user.ts                          (+67, -8 行)
    - src/api/types.ts                         (+15 行)
    - src/middleware/auth.ts                   (+23 行)

  测试 (2 文件):
    - tests/api/user.test.ts                   (+89 行)
    - tests/middleware/auth.test.ts            (+34 行)

其中 4 个文件已暂存,3 个未暂存。

1.2 用自然语言执行 Git 命令

Claude Code 将 Git 命令的语义与自然语言意图进行映射。你不需要记住 git checkout -bgit rebase --onto 的精确语法,只需描述你想做什么:

User: 创建一个功能分支来实现通知系统,基于 main 分支

Claude: 已创建并切换到分支 feature/notification-system
       (基于 main,当前最新 commit: a3f7d2e)

User: 把这个分支变基到最新的 main 上

Claude: 正在获取远程更新...
       已将 feature/notification-system 变基到 origin/main 之上
       (解决了 0 个冲突)

User: 删除所有已经合并到 main 的本地分支

Claude: 发现以下 3 个分支已合并到 main,可以安全删除:
       - fix/auth-timeout
       - chore/update-deps
       - docs/api-guide
       
       确认删除吗? (y/n)

这种对话式交互的核心优势在于:Claude 不仅执行命令,还会在执行前分析潜在影响、在执行后总结结果,并在遇到问题时提供上下文解释而非原始错误信息。

1.3 暂存与撤销

暂存(stage)和撤销(undo)是日常开发中最频繁的操作之一。Claude Code 支持精确到文件甚至代码块的粒度控制:

User: 只暂存 src/api/ 目录下的修改

Claude: 已暂存 src/api/ 目录下的 3 个文件。
       剩余 2 个未暂存文件:tests/api/user.test.ts, README.md

User: 撤销刚才对 auth.ts 的所有修改

Claude: 已重置 src/middleware/auth.ts 到 HEAD 状态。
       (丢弃了 23 行新增内容)

User: 把未暂存的修改保存起来,我要切换分支

Claude: 已创建 stash: "WIP on feature/notification-system"
       包含 2 个文件的未暂存修改。

Claude Code 还内置了快速撤销机制:在 Claude 正在修改文件时,连续按两次 Esc 键(Esc+Esc)可中断当前回合。部分情况下可回滚已做出的文件修改,但并非保证性撤销——部分修改可能已在之前的 tool use 中写入。这与 git stash 不同——它是一个内部检查点机制,保存了代码状态和对话上下文。官方定义为 "Rewind or summarize — Restore code and/or conversation to a previous point, or summarize from a selected message"。

2. 生成提交信息

提交信息(commit message)是代码历史的叙事线索。一个良好的提交信息能够在六个月后帮助团队理解"为什么"做出某个变更。Claude Code 通过分析实际 diff 内容(而非生成通用模板)来撰写描述性提交信息。

2.1 自动分析 diff 生成消息

当你请求提交时,Claude Code 会执行以下流程:

  1. 运行 git diff 读取所有 staged/unstaged 变更
  2. 分析代码语义,识别变更类型(新功能、Bug 修复、重构、文档等)
  3. 根据项目约定生成提交信息
  4. 展示给你确认后再执行 git commit

对话示例

User: commit these changes

Claude: 我已分析你的变更,生成以下提交信息:

       feat(api): add cursor-based pagination to search endpoint

       - Implement keyset pagination using created_at + id composite cursor
       - Add database migration for composite index on (created_at, id)
       - Update OpenAPI spec with pagination query parameters
       - Add integration tests for edge cases (empty result, last page)

       提交信息是否符合你的预期?
       [y] 确认提交  [n] 修改信息  [s] 拆分提交  [c] 取消

描述性提交信息有助于审查者快速理解变更意图,是团队代码审查的最佳实践。

2.2 遵循团队提交规范

如果你的团队使用 Conventional Commits 或其他提交规范,只需在项目的 CLAUDE.md 中声明,Claude 会自动遵循:

## 提交规范

- 使用 Conventional Commits 格式:feat, fix, docs, refactor, test, chore
- 包含作用域:feat(auth): add OAuth flow
- 主题行不超过 72 个字符
- 多文件变更添加正文,使用 bullet points
- 关联 Issue 编号:Closes #123

配置后,每次提交都会自动匹配规范,无需反复提醒。

2.3 拆分纠缠的变更

实际开发中,工作目录常常包含多个不相关的变更——一个新功能、一个顺手修复的 Bug、一段看到就忍不住重构的代码。Claude Code 可以帮你将它们拆分为逻辑独立的提交:

User: 我的工作目录里有多个不相关的修改,帮我拆分成独立的提交

Claude: 我分析了你的变更,识别出 3 个逻辑组:

       组 1 - Bug 修复 (2 文件):
         src/auth/session.ts      - 修复会话超时计算
         tests/auth/session.test.ts
         → 建议提交: fix(auth): correct session timeout calculation

       组 2 - 新功能 (3 文件):
         src/api/search.ts        - 添加分页参数
         src/db/migrations/...    - 添加索引
         tests/api/search.test.ts
         → 建议提交: feat(api): add pagination to search endpoint

       组 3 - 重构 (2 文件):
         src/utils/helpers.ts     - 提取公共函数
         src/utils/validators.ts
         → 建议提交: refactor(utils): extract shared validation logic

       确认这个分组方案吗?确认后我会按组依次暂存并提交。

2.4 提交信息中的 Co-Authored-By

Claude Code 默认会在提交信息中添加 AI 协作署名:

feat(api): add cursor-based pagination to search endpoint

- Implement keyset pagination using created_at + id composite cursor
- Add database migration for composite index on (created_at, id)

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>

GitHub 会识别 Co-Authored-By 格式,在提交详情页显示 Claude 为协作者。这提供了透明度,让团队了解代码的生成方式。如需关闭此功能,可在 ~/.claude/settings.json 中配置:

{
  "includeCoAuthoredBy": false
  // 其他 Git 相关配置请以官方文档为准
  // https://code.claude.com/docs/en/setup
}

项目级配置可放在 .claude/settings.json(纳入版本控制)或 .claude/settings.local.json(个人偏好)中。

3. 分支管理

分支是并行开发的载体。Claude Code 将分支的创建、切换、同步和清理全部转化为对话操作。

3.1 创建与切换分支

User: 为支付集成功能创建一个新分支

Claude: 已创建并切换到 feature/payment-integration
       (基于当前分支 main,commit: 8e2a1c4)

User: 切换到包含认证重构的那个分支

Claude: 找到匹配分支: refactor/auth-module
       已切换。该分支基于 main,领先 12 个 commit。

如果 CLAUDE.md 中定义了分支命名规范,Claude 会自动遵循。例如:

## 分支命名规范

- 功能分支: feat/{short-description}
- 修复分支: fix/{issue-id}-{short-description}
- 重构分支: refactor/{area}
- 文档分支: docs/{topic}

3.2 保持分支同步

在功能分支上开发时,main 分支可能已有新的提交。Claude Code 支持多种同步策略:

User: 把我的分支变基到最新的 main 上

Claude: 正在执行: git fetch origin && git rebase origin/main
       变基完成,无冲突。
       
User: 如果有冲突,逐个解释并让我确认后再解决

Claude: 发现 2 个冲突文件:

       文件 1: src/auth/handlers.ts
       - main 分支添加了速率限制逻辑
       - 你的分支重构了 handler 为多个小函数
       - 建议: 将速率限制逻辑移入你新建的 validateLogin 函数
       
       [展示建议的合并结果]
       
       确认这个解决方案吗?

3.3 分支清理

长期积累的分支会造成混乱。Claude Code 可以智能识别可清理的分支:

User: 显示哪些本地分支已经合并到 main 可以删除

Claude: 以下分支已完全合并到 main:

       已合并 (可安全删除):
       - fix/auth-timeout      最后提交: 3 周前
       - feat/email-notify     最后提交: 2 周前
       - chore/lint-config     最后提交: 1 周前
       
       未合并 (保留):
       - feature/ai-chat       领先 main 15 个 commit
       - refactor/db-layer     领先 main 8 个 commit
       
       要删除已合并的分支吗?

4. 解决合并冲突

合并冲突是 Git 工作流中最令人头疼的环节。Claude Code 的核心价值在于:它不是简单地让你选择"保留我们的"或"保留他们的",而是读取冲突标记、追溯双方变更历史、用自然语言解释冲突的本质,并提议一个融合双方意图的解决方案。

4.1 冲突解决对话流程

User: 解决 rebase 后的所有冲突

Claude: 发现 3 个冲突文件,按严重程度排序:

       === 文件 1: src/api/routes.ts (高) ===
       
       冲突描述:
       - main 分支将路由注册改为异步加载模式
       - 你的分支添加了新的 /webhook 路由
       
       分析: 两个变更都需要保留。新路由需要适配异步加载模式。
       
       建议方案:
       [展示合并后的代码]
       
       确认 / 修改 / 跳过这个文件?

Claude Code 通过读取冲突标记和双方变更历史,用自然语言解释冲突本质并提议解决方案。对于简单文本冲突,Claude 通常能直接给出合并建议;涉及业务逻辑的冲突,建议始终要求 Claude 解释原因后再确认。

冲突类型解决策略
简单文本冲突上下文合并
结构性冲突(import、函数)上下文理解 + 智能建议
语义冲突(业务逻辑)提议方案 + 人工确认

4.2 冲突解决最佳实践

复制粘贴用冲突解决提示词

我有 merge/rebase 后的冲突。对每个冲突文件:

1. 解释冲突双方各自的意图是什么
2. 判断哪一方明显正确,或是否需要合并
3. 展示建议的解决方案
4. 等我确认后再解决每个文件

不要自动解决。我要理解每个冲突的原因。

关键原则

  • 始终要求 Claude 解释冲突原因,而非直接应用修复
  • 审查建议方案,特别是涉及业务逻辑的文件
  • 如果 Claude 遗漏了某部分逻辑,明确指出:"这个方案丢失了 main 分支的速率限制逻辑,需要保留"

5. 代码审查辅助

Pull Request 是团队协作的核心环节。Claude Code 可以在 PR 创建前帮你审查变更、生成摘要,并在 PR 创建后协助处理反馈。

5.1 变更摘要与审查清单

在创建 PR 前,先让 Claude 帮你审查:

User: 总结当前分支相对于 main 的所有变更

Claude: 分支 feature/pagination 相对于 main 的变更摘要:

       ## 变更概览
       - 5 个提交,涉及 7 个文件,+312/-45 行
       
       ## 按区域分组
       
       数据库层:
       - 新增复合索引 (created_at, id)
       - 新增迁移文件
       
       API 层:
       - 搜索端点支持 cursor 分页
       - 新增分页参数校验
       
       测试:
       - 分页功能的集成测试
       - 边界条件测试(空结果、末页)
       
       ## 潜在关注点
       - 新索引对写入性能的影响需关注
       - cursor 编码使用 base64,需确认是否兼容旧客户端

5.2 PR 描述生成

User: 为这个分支创建 PR,描述要包含测试方法和迁移步骤

Claude: 已生成 PR 描述:

       ## 摘要
       为搜索端点添加基于 cursor 的分页支持,替代原有的 offset 分页。
       
       ## 变更内容
       - 实现 keyset pagination,使用 created_at + id 复合 cursor
       - 添加数据库迁移创建复合索引
       - 更新 OpenAPI 规范
       - 添加完整测试覆盖
       
       ## 测试方法
       1. 运行 `npm test -- search.pagination`
       2. 手动测试: `curl http://localhost:3000/api/search?cursor=eyJpZCI6MTB9`
       3. 验证末页响应中 `hasMore: false`
       
       ## 迁移步骤
       运行 `npm run migrate:up` 应用新索引
       
       ## 破坏性变更
       无。offset 参数仍受支持但标记为弃用。
       
       确认创建 PR 吗?

生产级 PR 提示词模板

为这个分支创建 Pull Request,包含:

1. 70 字符以内的简洁标题
2. 2-3 个 bullet points 的变更摘要
3. 测试方法部分,描述如何验证变更
4. 破坏性变更或迁移步骤的说明
5. 关联的 Issue 链接(如果有)

如果分支还没 push,先 push。

5.3 审查反馈处理

User: PR #42 有什么审查反馈?

Claude: PR #42 有 3 条审查评论:

       1. @alice 在 src/api/search.ts:45:
          "cursor 解码应该有错误处理"
          → 建议添加 try/catch,返回 400 错误
       
       2. @bob 在 tests/api/search.test.ts:89:
          "缺少空 cursor 的测试用例"
          → 建议添加测试: 不传 cursor 时默认返回第一页
       
       3. @alice 在 migrations/...:
          "索引应该先评估对写入性能的影响"
          → 建议添加性能测试或分阶段 rollout 计划
       
       要我逐条处理这些反馈吗?

6. GitHub 集成

Claude Code 通过 GitHub CLI (gh) 与 GitHub 深度集成,支持 PR 创建、Issue 关联、Actions 触发等操作。

6.1 PR 创建与管理

Claude Code 支持通过交互式命令一步完成提交、推送和 PR 创建:

User: 提交并创建 PR

Claude: [交互式命令] /commit-push-pr
       已分析变更,执行以下操作:
       1. 暂存所有变更
       2. 生成提交信息: feat(api): add cursor-based pagination
       3. 推送到 origin/feature/pagination
       4. 创建 PR #143: https://github.com/org/repo/pull/143
       
       会话已关联到 PR #143。之后可用 `claude --from-pr 143` 恢复此会话。

更精细的控制可以通过 gh pr create 的各选项实现:

操作Claude 自然语言底层命令
创建 PR"create a PR for this branch"gh pr create --fill
指定审查人"create PR with alice and bob as reviewers"gh pr create --reviewer alice,bob
标记为草稿"create a draft PR"gh pr create --draft
关联 Issue"create PR that closes #123"PR body 包含 Closes #123
添加到项目"add PR to Roadmap project"gh pr create --project "Roadmap"

6.2 Issue 关联

在 PR 描述中引用 Issue 可以建立自动关联:

User: 创建 PR 并关联 Issue #456

Claude: 已在 PR 描述中添加 `Closes #456`。
       当 PR 合并时,Issue #456 将自动关闭。

支持的关联关键词:ClosesFixesResolvesRelates to。GitHub 会在 PR 合并时自动关闭被引用的 Issue。

6.3 Actions 触发与监控

Claude Code 可以触发和监控 GitHub Actions 工作流:

User: 触发部署工作流到 staging 环境

Claude: 正在触发 workflow "deploy.yml"...
       运行 ID: 8923456712
       状态: 排队中
       
       监控链接: https://github.com/org/repo/actions/runs/8923456712

User: 检查 CI 状态

Claude: 最新 CI 状态 (PR #143):
       - 测试: 通过 (2m 34s)
       - 类型检查: 通过 (1m 12s)
       - 构建: 通过 (3m 45s)
       - 代码覆盖率: 87% (+2%)
       
       所有检查通过,PR 可合并。

通过 gh workflow run 可以手动触发支持 workflow_dispatch 事件的工作流:

# 触发工作流并传入参数
gh workflow run deploy.yml -f environment=staging -f version=1.2.3

7. 高级工作流

7.1 Interactive Rebase

Interactive rebase 是整理提交历史的利器,但其语法对许多开发者来说过于晦涩。Claude Code 让你用自然语言描述 rebase 意图:

User: 整理最近 5 个提交。把两个 "fix typo" 提交合并到前面的功能提交里,
     并把 "add user auth" 的提交信息改得更详细一些

Claude: 正在构建 rebase 计划:

       pick    a1b2c3d  feat: add user authentication
       squash  e4f5g6h  fix typo
       squash  i7j8k9l  fix typo
       reword  m0n1o2p  add user auth
       pick    q3r4s5t  test: add auth integration tests
       
       执行 rebase 吗?

如果 rebase 过程中出现冲突,Claude 会使用与合并冲突相同的对话式解决流程。

7.2 Squash 合并

User: 把这个分支的所有提交压缩成一个,并写一个好的提交信息

Claude: 将把 8 个提交压缩为 1 个:

       新提交信息:
       feat(api): implement cursor-based pagination
       
       - Replace offset pagination with keyset pagination
       - Add composite index on (created_at, id)
       - Update OpenAPI spec with cursor parameters
       - Add comprehensive test coverage
       
       确认执行 squash 吗?

7.3 Cherry-Pick

Cherry-pick 用于将特定提交应用到当前分支,常用于热修复:

User: 把 release 分支上的数据库迁移修复 cherry-pick 到 main

Claude: 找到提交 abc1234 (fix: correct migration rollback logic)
       正在 cherry-pick 到当前分支...
       成功应用,无冲突。

如果 cherry-pick 产生冲突,Claude 会解释冲突原因——通常是因为提交应用的上下文在两个分支中不同。

7.4 Git Bisect 调试

git bisect 是定位引入 Bug 的提交的二分查找工具。Claude Code 可以自动化整个过程:

User: 帮我 bisect,这个 Bug 是在最近 20 个提交里引入的

Claude: 启动 bisect...
       坏提交: HEAD (当前)
       好提交: HEAD~20
       
       测试第 10 个提交... [自动运行测试]
       结果: 测试通过 → 好提交
       
       测试第 15 个提交... [自动运行测试]
       结果: 测试失败 → 坏提交
       
       ...
       
       找到引入 Bug 的提交: a3f7d2e
       作者: Alice
       时间: 3 天前
       变更: refactor(auth): extract token validation
       
       要查看这个提交的详细 diff 吗?

7.5 Git 历史作为调试工具

Claude Code 可以将 Git 历史作为理解代码演化的工具:

User: 认证超时行为最近什么时候改过的?给我看提交和 diff

Claude: 找到相关提交:
       
       commit 8e2a1c4 (2 周前)
       Author: Bob
       
       fix(auth): reduce session timeout from 30min to 15min
       
       - Security requirement from audit #2025-04
       - Active users get refresh token automatically
       - Configurable via SESSION_TIMEOUT_MINUTES env var

User: 支付模块的回归问题是谁引入的?Bug 是 1 月 15 日报的

Claude: 分析 1 月 8 日-15 日的提交...
       
       引入回归的提交: 7d3e9f1 (1 月 12 日)
       Author: Carol
       
       feat(payment): add retry logic for failed transactions
       
       问题: 重试逻辑未正确处理已部分完成的交易,
       导致重复扣款。

8. 并行开发:Git Worktrees

Git worktrees 允许你从同一个仓库检出多个分支到不同的工作目录,共享同一份 Git 历史但拥有完全独立的文件状态。这是运行并行 Claude Code 会话的官方推荐方式。

8.1 为什么需要 Worktrees

当你运行 Claude Code 时,AI 代理直接读写工作目录中的文件。如果主工作目录中有一个正在进行的任务,你无法:

  • 检出另一个分支处理紧急 Bug
  • 安全地运行另一个 Claude 会话
  • 查看其他分支的代码状态

Worktrees 解决了这个问题。每个 worktree 是一个独立的目录,有自己的分支检出,互不干扰。

8.2 Claude Code 的 Worktree 支持

Claude Code 通过 --worktree(简写 -w)标志原生支持 worktree:

# 创建新 worktree 并启动 Claude 会话
claude --worktree feature-payments

# 等价于
claude -w feature-payments

Claude 会在 .claude/worktrees/feature-payments/ 目录下创建隔离的 worktree,检出新分支,并将会话限定在该目录内。你的主工作树完全不受影响。

实际工作流示例

# Terminal 1: 支付功能开发
claude -w feature-payments

# Terminal 2: 认证 Bug 修复
claude -w fix-auth-timeout

# Terminal 3: 数据库重构
claude -w refactor/db-layer

三个 Claude 会话同时运行,各自处理不同的任务,零干扰。

8.3 手动 Worktree 管理

如果你偏好手动控制,也可以使用原生 Git 命令:

# 创建新 worktree 并同时创建新分支
git worktree add ../myproject-feature-a -b feature/notifications

# 为已有分支创建 worktree
git worktree add ../myproject-hotfix hotfix/auth-timeout

# 列出所有 worktree
git worktree list

# 移除 worktree
git worktree remove ../myproject-feature-a

# 清理已不存在的 worktree 记录
git worktree prune

目录结构示例

/projects/
├── my-project/          # 主工作树 (main 分支)
│   └── .git/            # 实际的 Git 仓库数据
│
├── auth-refactor/       # worktree (feat/auth-refactor)
│   └── .git             # 指向主仓库的链接文件
│
├── ai-chat-feature/     # worktree (feat/ai-chat)
│   └── .git
│
└── bug-fix-patch/       # worktree (fix/bug-patch)
    └── .git

8.4 Worktree 最佳实践

  1. .claude/worktrees 加入 .gitignore:避免 worktree 目录被意外提交
    echo ".claude/worktrees" >> .gitignore
    
  2. 退出时清理:使用 --worktree 启动的 Claude 会话在退出时会询问是否保留 worktree。工作已完成则选择删除,计划继续则保留
  3. 避免同一分支多 worktree:Git 禁止同一分支在多个 worktree 中同时检出
  4. 注意 stash 共享:stash 存储在 Git 对象库中,对所有 worktree 可见。使用 worktree 时尽量避免 stash,这正是 worktree 要解决的问题
  5. Rebase Before PR:在创建 PR 前,始终先 rebase 到最新的 main,保持线性历史
    git fetch origin
    git rebase origin/main
    git push --force-with-lease
    

9. 会话与 Git 状态的关联

Claude Code 会话与目录绑定,而非与分支绑定。当你切换分支时,Claude 仍然保留对话历史,但会读取新分支的文件。这意味着你可以:

  • 在功能分支上启动会话
  • 切换到 main 查看某段代码
  • 切换回原分支继续工作

9.1 恢复会话

# 继续最近的会话
claude -c

# 从会话列表中选择
claude --resume

# 从特定 PR 恢复会话
claude --from-pr 142

在会话选择界面中,可以按 B 键按分支过滤。

9.2 检查点(Checkpoint)

检查点是 Claude Code 的内部机制,与 Git commit 不同。它在代码之外还保存了对话上下文:

User: 在重构认证模块前创建一个检查点

Claude: 已创建检查点。
       代码状态 + 对话上下文已保存。
       可随时恢复到此状态。

10. 配置与最佳实践

10.1 CLAUDE.md 中的 Git 配置

CLAUDE.md 中定义 Git 规则,让 Claude 自动遵循:

## Git 规范

### 提交格式
- 使用 Conventional Commits,英文
- 分支前缀: feat/, fix/, chore/, refactor/, docs/
- PR 必须包含描述和测试清单
- 合并策略: 使用 rebase 保持线性历史

### 分支保护
- 禁止直接 push 到 main
- PR 需要至少 1 个审查人批准
- CI 通过后方可合并

### 工作流
- 功能开发: 从 main 切出 feature 分支
- 修复: 从 main 切出 fix 分支,cherry-pick 到 release
- 发布: 使用 squash merge 到 main

配置良好的 CLAUDE.md 能帮助 Claude 理解团队 Git 规范,减少因规范不一致导致的额外沟通成本。

10.2 常见陷阱与规避

问题原因解决方案
Claude 提交了不想要的文件指令不够精确明确指定文件范围,或先手动暂存
提交信息不符合团队规范CLAUDE.md 未配置CLAUDE.md 中声明提交格式
冲突解决丢失重要变更未审查建议方案要求 Claude 逐个解释冲突
PR 描述过于通用指令不够具体明确列出 PR 描述应包含的章节
Worktree 会话互相干扰同一目录运行多个 Claude每个 Claude 实例使用独立 worktree

10.3 最佳实践清单

  • 审查 Claude 的提交:推送前运行 git log --oneline -5git diff HEAD~1 检查
  • 小粒度提交:小而聚焦的提交让 Claude 生成更精确的提交信息,也便于 bisect 调试
  • 描述性分支名:帮助 Claude 理解上下文,生成更好的 PR 描述
  • 显式声明提交规范:如果使用 Conventional Commits 等标准,明确告知 Claude
  • 利用 Claude 进行 Git 考古:用自然语言查询历史,快速定位变更原因
  • 大仓库使用 /compact:帮助 Claude 高效管理上下文

参考来源