作者:也无风雨也雾晴
原文:https://juejin.cn/post/7596904122865254451
用 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-authclaude这样就有了一个独立的 Claude Code 实例,在 feature/auth 分支上工作。你可以开多个终端,每个终端进入不同的 worktree,启动不同的 Claude Code 实例。
查看和清理
# 查看所有 worktreegit 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/featurePreparing worktree (new branch 'demo/feature')HEAD is now at 64d1da9 chore: 删除 demo HTML 文件。$ git worktree add ../worktrees/demo-bugfix -b demo/bugfixPreparing 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.md5. 查看分支历史
$ 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/bugfixDeleted branch demo/feature (was dbad1c0).Deleted branch demo/bugfix (was 00198c6).整个过程就是这样,每个 worktree 都是独立的工作空间,可以同时在不同分支上工作。
实际工作流
假设你有三个任务要做:
实现用户认证模块(预计 2 小时) 修复一个支付相关的 bug(预计 30 分钟) 重构 API 层(预计 3 小时)
传统做法是一个一个来,总共需要 5.5 小时。用 worktree + Claude Code,可以这样:
# 终端 1:创建认证功能的 worktreegit worktree add ../worktrees/auth -b feature/authcd ../worktrees/authclaude# 告诉 Claude:实现用户认证模块,包括登录、注册、token 管理# 终端 2:创建修 bug 的 worktreegit worktree add ../worktrees/fix-payment -b fix/payment-bugcd ../worktrees/fix-paymentclaude# 告诉 Claude:修复支付模块的 xxx bug# 终端 3:创建重构的 worktreegit worktree add ../worktrees/refactor-api -b refactor/api-layercd ../worktrees/refactor-apiclaude# 告诉 Claude:重构 API 层,统一错误处理和响应格式三个 Claude 同时干活,互不干扰。理论上,如果任务足够独立,总耗时可以压缩到最长任务的时间(3 小时),效率提升 45% 。
你可以在主工作区继续做自己的事,偶尔切过去看看进度,或者用 Plan Mode 让 Claude 先说清楚打算怎么做。
封装成命令
每次敲这么多命令有点烦,可以封装一下:
# 加到 ~/.zshrc 或 ~/.bashrccw() {local branch=$1local worktree_dir="../worktrees/$branch"if [[ -z "$branch" ]]; thenecho"用法: cw <分支名>"return 1fi# 如果 worktree 不存在就创建if [[ ! -d "$worktree_dir" ]]; then git worktree add "$worktree_dir" -b "$branch" 2>/dev/null || \ git worktree add "$worktree_dir""$branch"ficd"$worktree_dir" claude}用起来就一行:
cw feature/auth # 创建 worktree 并启动 Claude Code开发完怎么合并
和普通分支开发一样,通过 PR 或者直接 merge。
通过 PR(推荐)
cd ../worktrees/feature-authgit 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 maingit merge feature/authgit push合并后清理
git worktree remove ../worktrees/feature-authgit branch -d feature/auth几个注意事项
1. 任务要足够独立
如果两个任务改的是同一批文件,并行开发反而会增加合并冲突。适合并行的是那些相对独立的功能模块。
适合并行:
前端组件 A + 后端 API B 功能模块 X + bug 修复 Y 数据库迁移 + 文档更新
不适合并行:
同一个文件的两处修改 有强依赖关系的功能(B 依赖 A 的接口)
2. 定期从 main 同步
长时间不同步,分支会偏离主干太远,最后合并时冲突会很多。建议每天 merge 一次 main:
cd ../worktrees/feature-authgit fetch origingit merge origin/main3. 用 Plan Mode 先确认方案
Claude Code 有个 Plan Mode,在动手之前先让它说清楚打算怎么做。并行开发时更需要这个,避免 Claude 跑偏了你还不知道。
开启方法:
VS Code: Cmd/Ctrl + Shift + P→Claude Code: Toggle Plan ModeCLI:启动时加 --plan参数
4. 别开太多
API 有调用频率限制,开太多 worktree 同时跑 Claude 可能会触发限流。我自己的经验是 3-5 个 差不多了。
5. 注意依赖安装
每个 worktree 共享 .git,但 node_modules、venv 这些是独立的。如果你在 worktree 里装了新依赖,记得在主工作区也装一遍。
适合什么场景
适合:
多个独立功能同时开发 跑长任务(重构、迁移)的同时不想阻塞日常开发 让两个 Claude 各写一版,对比选优 跑 overnight 任务,第二天起来收代码 紧急 hotfix 和日常开发并行
不太适合:
需求还没想清楚,还在探索阶段 任务之间有强依赖 项目很小,不值得这么折腾 团队协作(容易产生分支管理混乱)
实际效果
我在自己的项目里试了一周,大概的感受是:
时间节省:原本需要串行完成的 3 个任务,现在可以并行,总耗时减少约 40% 心智负担降低:不用频繁切分支,每个任务都有独立的上下文 代码质量提升:可以让两个 Claude 各写一版,选更好的那个 适合长任务:重构、迁移这种耗时长的任务,可以放在后台跑,不影响日常开发
但也有坑:
合并冲突比预期多(因为没有及时同步 main) 有时候会忘记某个 worktree 还在跑,导致分支越来越多 需要手动管理多个终端窗口,有点乱
转载声明:所有转载文章必注明原文出处或转载出处(转载处未注明原文出处的情况),如有侵权请联系删除
夜雨聆风