利用好Git Worktree + Claude Code:让 AI 帮你并行开发

用 AI 写代码的时候,大家有没有遇到这样一个问题:它一次只能干一件事。

你让它重构一个模块,它就在那儿埋头干,你只能等着。想同时让它帮你修个 bug?不行,得排队。

其实可以用 Git Worktree 让多个 Claude Code 实例同时工作,各干各的,互不干扰。

Git Worktree 是什么

简单说,Git Worktree 让你在同一个仓库下同时检出多个分支,每个分支有自己独立的工作目录。

 git clone 多份的区别

  • git clone 多份:每份都有完整的 .git 目录,占用大量磁盘空间,分支之间互不知道
  • git worktree:共享同一个 .git 目录,几乎不占额外空间,分支之间可以互相看到

目录结构示例

my-project/              # 主工作区,你自己在这里开发
../worktrees/
  ├── feature-auth/      # Claude 1 在这里做认证功能
  ├── fix-bug-123/       # Claude 2 在这里修 bug
  └── refactor-api/      # Claude 3 在这里重构 API

每个目录都是完整的工作区,可以独立运行、独立提交、独立启动 Claude Code。

形象点说:就像你有一个大办公室(.git 目录),里面有很多小隔间(worktree),每个隔间都在干不同的活,但共享同一套基础设施(Git 历史、配置等)。

基本用法

创建 worktree

# 创建新分支并检出到独立目录
git worktree add ../worktrees/feature-auth -b feature/auth
​
# 基于已有分支创建
git worktree add ../worktrees/fix-bug origin/fix-bug-123
​
# 基于某个 commit 创建
git worktree add ../worktrees/hotfix abc123

在 worktree 中启动 Claude Code

cd ../worktrees/feature-auth
claude

这样就有了一个独立的 Claude Code 实例,在 feature/auth 分支上工作。你可以开多个终端,每个终端进入不同的 worktree,启动不同的 Claude Code 实例。

查看和清理

# 查看所有 worktree
git worktree list
​
# 删除 worktree(会保留分支)
git worktree remove ../worktrees/feature-auth
​
# 清理失效的 worktree 引用
git worktree prune

实际演示

下面是我在本地仓库实际执行的命令和输出:

1. 查看当前 worktree 状态

$ git worktree list
/Users/tsk/JS  64d1da9 [master]

目前只有主工作区。

2. 创建两个 worktree

$ git worktree add ../worktrees/demo-feature -b demo/feature
Preparing worktree (new branch 'demo/feature')
HEAD is now at 64d1da9 chore: 删除 demo HTML 文件。
​
$ git worktree add ../worktrees/demo-bugfix -b demo/bugfix
Preparing worktree (new branch 'demo/bugfix')
HEAD is now at 64d1da9 chore: 删除 demo HTML 文件。

3. 查看所有 worktree

$ git worktree list
/Users/tsk/JS                      64d1da9 [master]
/Users/tsk/worktrees/demo-bugfix   64d1da9 [demo/bugfix]
/Users/tsk/worktrees/demo-feature  64d1da9 [demo/feature]

现在有 3 个工作区了,每个都在不同的分支上。

4. 在不同 worktree 中分别提交

# 在 demo-feature 中提交
$ cd ../worktrees/demo-feature
$ echo "# Demo Feature" > README-feature.md
$ git add . && git commit -m "feat: add feature readme"
[demo/feature dbad1c0] feat: add feature readme
 1 file changed, 1 insertion(+)
 create mode 100644 README-feature.md
​
# 在 demo-bugfix 中提交
$ cd ../worktrees/demo-bugfix
$ echo "# Bugfix" > BUGFIX.md
$ git add . && git commit -m "fix: add bugfix notes"
[demo/bugfix 00198c6] fix: add bugfix notes
 1 file changed, 1 insertion(+)
 create mode 100644 BUGFIX.md

5. 查看分支历史

$ git log --oneline --all --graph -10
* 00198c6 (demo/bugfix) fix: add bugfix notes
| * dbad1c0 (demo/feature) feat: add feature readme
|/  
* 64d1da9 (HEAD -> master, origin/master) chore: 删除 demo HTML 文件。
* 7a18ac3 feat(log): 删除 Vercel React Skill 文档
* b7ccd2a feat(log): add vscode-ai-commit extension
...

可以看到两个分支各自有了新的提交,从同一个基点分叉出来。

6. 清理 worktree

$ git worktree remove ../worktrees/demo-feature
$ git worktree remove ../worktrees/demo-bugfix
​
$ git worktree list
/Users/tsk/JS  64d1da9 [master]
​
# 删除分支(因为没有合并,需要用 -D 强制删除)
$ git branch -D demo/feature demo/bugfix
Deleted branch demo/feature (was dbad1c0).
Deleted branch demo/bugfix (was 00198c6).

整个过程就是这样,每个 worktree 都是独立的工作空间,可以同时在不同分支上工作。

实际工作流

假设你有三个任务要做:

  1. 实现用户认证模块(预计 2 小时)
  2. 修复一个支付相关的 bug(预计 30 分钟)
  3. 重构 API 层(预计 3 小时)

传统做法是一个一个来,总共需要 5.5 小时。用 worktree + Claude Code,可以这样:

# 终端 1:创建认证功能的 worktree
git worktree add ../worktrees/auth -b feature/auth
cd ../worktrees/auth
claude
# 告诉 Claude:实现用户认证模块,包括登录、注册、token 管理
​
# 终端 2:创建修 bug 的 worktree
git worktree add ../worktrees/fix-payment -b fix/payment-bug
cd ../worktrees/fix-payment
claude
# 告诉 Claude:修复支付模块的 xxx bug
​
# 终端 3:创建重构的 worktree
git worktree add ../worktrees/refactor-api -b refactor/api-layer
cd ../worktrees/refactor-api
claude
# 告诉 Claude:重构 API 层,统一错误处理和响应格式

三个 Claude 同时干活,互不干扰。理论上,如果任务足够独立,总耗时可以压缩到最长任务的时间(3 小时),效率提升 45% 。

你可以在主工作区继续做自己的事,偶尔切过去看看进度,或者用 Plan Mode 让 Claude 先说清楚打算怎么做。

封装成命令

每次敲这么多命令有点烦,可以封装一下:

# 加到 ~/.zshrc 或 ~/.bashrc
cw() {
  local branch=$1
  local worktree_dir="../worktrees/$branch"
​
  if [[ -z "$branch" ]]; then
    echo "用法: cw <分支名>"
    return 1
  fi
​
  # 如果 worktree 不存在就创建
  if [[ ! -d "$worktree_dir" ]]; then
    git worktree add "$worktree_dir" -b "$branch" 2>/dev/null || \
    git worktree add "$worktree_dir" "$branch"
  fi
​
  cd "$worktree_dir"
  claude
}

用起来就一行:

cw feature/auth    # 创建 worktree 并启动 Claude Code

开发完怎么合并

和普通分支开发一样,通过 PR 或者直接 merge。

通过 PR(推荐)

cd ../worktrees/feature-auth
git add .
git commit -m "feat: implement user authentication"
git push -u origin feature/auth
​
# 创建 PR(需要安装 GitHub CLI)
gh pr create --title "Add user authentication" --body "实现用户认证功能"

直接 merge

cd ~/projects/my-project  # 回到主工作区
git checkout main
git merge feature/auth
git push

合并后清理

git worktree remove ../worktrees/feature-auth
git branch -d feature/auth

几个注意事项

1. 任务要足够独立

如果两个任务改的是同一批文件,并行开发反而会增加合并冲突。适合并行的是那些相对独立的功能模块。

适合并行

  • 前端组件 A + 后端 API B
  • 功能模块 X + bug 修复 Y
  • 数据库迁移 + 文档更新

不适合并行

  • 同一个文件的两处修改
  • 有强依赖关系的功能(B 依赖 A 的接口)

2. 定期从 main 同步

长时间不同步,分支会偏离主干太远,最后合并时冲突会很多。建议每天 merge 一次 main:

cd ../worktrees/feature-auth
git fetch origin
git merge origin/main

3. 用 Plan Mode 先确认方案

Claude Code 有个 Plan Mode,在动手之前先让它说清楚打算怎么做。并行开发时更需要这个,避免 Claude 跑偏了你还不知道。

开启方法:

  • VS Code:Cmd/Ctrl + Shift + P → Claude Code: Toggle Plan Mode
  • CLI:启动时加 --plan 参数

4. 别开太多

API 有调用频率限制,开太多 worktree 同时跑 Claude 可能会触发限流。我自己的经验是 3-5 个 差不多了。

5. 注意依赖安装

每个 worktree 共享 .git,但 node_modulesvenv 这些是独立的。如果你在 worktree 里装了新依赖,记得在主工作区也装一遍。

适合什么场景

适合

  • 多个独立功能同时开发
  • 跑长任务(重构、迁移)的同时不想阻塞日常开发
  • 让两个 Claude 各写一版,对比选优
  • 跑 overnight 任务,第二天起来收代码
  • 紧急 hotfix 和日常开发并行

不太适合

  • 需求还没想清楚,还在探索阶段
  • 任务之间有强依赖
  • 项目很小,不值得这么折腾
  • 团队协作(容易产生分支管理混乱)

实际效果

我在自己的项目里试了一周,大概的感受是:

  • 时间节省:原本需要串行完成的 3 个任务,现在可以并行,总耗时减少约 40%
  • 心智负担降低:不用频繁切分支,每个任务都有独立的上下文
  • 代码质量提升:可以让两个 Claude 各写一版,选更好的那个
  • 适合长任务:重构、迁移这种耗时长的任务,可以放在后台跑,不影响日常开发

但也有坑:

  • 合并冲突比预期多(因为没有及时同步 main)
  • 有时候会忘记某个 worktree 还在跑,导致分支越来越多
  • 需要手动管理多个终端窗口,有点乱
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐