using-git-worktrees
设计批准后创建隔离工作区,保持主线干净。
评分明细
适用场景
using-git-worktrees 快速入门
用 Git Worktree 给 AI 编程开”独立工位”,主线代码再也不会被半成品污染。
这是什么?解决什么问题?
using-git-worktrees 是 Obra 团队(superpowers 套件)中专门处理”工作区隔离”的工作流 Skill,核心载体是 Git 2.5+ 引入的 git worktree 命令。它要解决的是这样一个具体场景:你刚让 AI 在主分支上做了一个大功能,改到一半发现有几个实验性想法想并行验证,或是要切出去修一个紧急 bug——但当前的 working directory 里堆满了未提交的半成品,你想”保存现场”又不想 commit 一堆脏数据。
这个 Skill 提供的核心思路是:当设计阶段获得批准(通常由 brainstorming 或 writing-plans Skill 完成)后,先建一个 worktree 隔离工作区,在那个 worktree 里跑后续所有改动(写代码、跑测试、AI 子代理派遣、code review)。主 worktree(通常是主分支)始终保持”基线干净”,任何半成品、实验性 commit、AI 误操作,统统被关在子 worktree 里,随时可以删除而不影响主线。
它归属于 obra/superpowers 套件,定位”工程方法”类。Obra 在 GitHub 上的 superpowers 仓库 40k+ Stars、MIT 协议,被很多 Claude Code 用户视为”AI 软件工程流程”的标杆实现。using-git-worktrees 在工作流上常排在 brainstorming → writing-plans → using-git-worktrees → test-driven-development 之后,起”开始动手前的最后一道隔离闸门”作用。
准备工作
- Git 2.5 或更高版本:
git worktree自 2015 年 7 月发布的 Git 2.5 引入,2026 年的 Git 客户端(2.40+)支持完善。可用git --version确认。 - 一个干净的 Git 仓库:在项目根目录执行
git status应该是 no changes。如果有未提交改动,先 commit 或 stash,否则建 worktree 时 Git 会拒绝。 - 分支命名规范:推荐
feature/<ticket>-<short-desc>或wt/<topic>这样的形式,方便后续管理。 - Claude Code 或兼容 Agent:本 Skill 由 Agent 主动调度,需要 Agent 能执行 shell 命令。
- 设计已被批准:按照 Obra 的整体工作流,使用本 Skill 之前应已经过 brainstorming,产出过设计文档,否则容易”先建 worktree 再改需求”。
3 步快速上手
第 1 步:安装 Skill
克隆 obra/superpowers 仓库,定位到 skills/using-git-worktrees/ 目录。
git clone https://github.com/obra/superpowers.git ~/superpowers
mkdir -p ~/.claude/skills
ln -s ~/superpowers/skills/using-git-worktrees ~/.claude/skills/using-git-worktrees
软链接的目的是让 Claude Code 启动时自动扫描并加载 SKILL.md。
第 2 步:验证安装
打开你的项目仓库,启动 Claude Code 后输入:
用 using-git-worktrees Skill 给我讲讲它的核心使用规则。
Agent 会回读 SKILL.md,告诉你”什么时候该建 worktree、什么时候不该建”,以及命名规范。你也可以在 shell 里直接验证命令:
git worktree list
正常应该输出当前仓库所有 worktree,至少有 1 个主 worktree 指向当前 checkout 的分支。
第 3 步:用 Skill 跑第一个任务
假设你要在当前项目里新增一个”用户头像上传”功能,设计已批准(走完 brainstorming 阶段)。在 Claude Code 对话框中输入:
请用 using-git-worktrees 流程,为”用户头像上传”功能建一个 worktree,并把后续所有改动限制在那个 worktree 里。
Agent 会按 SKILL.md 自动执行类似如下 shell 步骤:
git worktree add ../myproject-avatars -b feature/avatars main
cd ../myproject-avatars
接下来所有”装依赖、写代码、跑测试、派遣子代理”都发生在 ../myproject-avatars 目录下,与主 worktree 互不干扰。完成后用:
git worktree remove ../myproject-avatars
即可一键清理,主分支的 git log 不会有任何脏 commit。
常见踩坑
- 在主 worktree 上直接动手:违反 Skill 的”先建 worktree 再改”原则,半成品会污染主分支。养成”任何非 trivial 改动都先开 worktree”的肌肉记忆。
- worktree 路径选错:放在项目内部(如
myrepo/.worktrees/avatars)容易让编辑器或构建工具误扫描到,推荐放在项目同级目录,如../myrepo-avatars。 - 忘记基线验证:建 worktree 前不跑测试,导致”在错误的基线上开发”,最后合并时一堆冲突,排查困难。建完先跑一次
npm test/pytest确认基线绿。 - worktree 长期堆积:
git worktree list一长串没人清理,占用磁盘。可定期git worktree prune清理无效条目。 - 跨 worktree 共用未跟踪文件:
.env、IDE 配置、node_modules 这类常被 .gitignore 忽略,新 worktree 不会自动带过去,需要手动复制或用符号链接。 - 在同一 worktree 跑多个并行任务:一个 worktree 一个分支一个任务,不要在同一个 worktree 里同时改两个不相关的功能,合并时再分也来不及。
初级用法
- 新功能开发:每次接到新需求,先
git worktree add ../proj-feat-x -b feature/x main,在那个目录里改完、跑通测试,再开 PR。 - 紧急 hotfix:在主 worktree 跑
git worktree add ../proj-hotfix main直接基于主干建独立 hotfix 目录,修复后 merge 回 main,不影响当前进行中的 feature worktree。 - AI 实验性改动:让 AI 在临时 worktree 里”先试试”,试坏了直接
git worktree remove删掉,主分支毫发无损。
高级玩法
- 与 subagent-driven-development 串联:在子 worktree 里再启动 subagent-driven-development 调度,实现”工作区隔离 + 任务隔离”双层保险。
- Worktree 池化:为常用场景(如
wt-review、wt-experiment)预建 worktree,需要时直接cd进去,避免每次手动 add。 - CI 配合:在 worktree 里跑 CI 任务(如
act本地跑 GitHub Actions),多个 worktree 互不干扰,可以同时验证多套方案。 - 脚本化命名规范:把”建 worktree”封装成内部脚本,自动从分支名解析 ticket、jira 链接,统一团队实践。
小技巧
- 给 worktree 起带 ticket 号的目录名(如
myrepo-PROJ-1234),ls一眼看到这是哪个任务的工位。 - 在 worktree 根目录放一个
.worktree-marker空文件,编辑器打开时一眼分辨”现在在 worktree 里还是主目录里”。 - 配合
git worktree list --porcelain写监控脚本,定期清理长期无 commit 的”僵尸” worktree。 - 合并 PR 后立即
git worktree remove,不要等到下次想起来,容易忘记分支已经被删除导致 prune 失败。 - 在
.gitignore里把.worktrees/加入(如果走同目录子目录模式),避免 IDE/构建工具误索引。
参考链接
- obra/superpowers 仓库:https://github.com/obra/superpowers
- using-git-worktrees 源码目录:https://github.com/obra/superpowers/tree/main/skills/using-git-worktrees
- Git 官方
git-worktree文档:https://git-scm.com/docs/git-worktree - Pro Git 中文版”工作树”章节:https://git-scm.com/book/zh/v2/Git-工具-工作树
- Claude Code 官方 Skills 文档:https://docs.claude.com/en/docs/claude-code/skills
写在最后:worktree 不是银弹
using-git-worktrees 是一个”用流程换安全感”的工作流 Skill,它不能替你做设计、不能替你写测试、也不能替你 review。它能给你的,是”当 AI 写崩了、或者你中途改主意了,有一个一键丢弃的沙箱”——这正是它最朴素也最有价值的地方。对于刚接触 superpowers 套件的团队,建议先在一个低风险项目上完整跑一遍”建 worktree → 改代码 → 跑测试 → 合并 → 清理 worktree”的闭环,把这条流水线固化成团队习惯,再把它推广到核心项目。
实际生产里,worktree 经常和”主干保护分支(branch protection)+ 强制 PR 评审”联用:主分支锁死,所有改动必须从 worktree 提 PR,合并后立刻清理 worktree,这样即使有 AI 写崩的中间产物,也只影响 PR 自身,主分支永远处于可发布状态。
本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。
using-git-worktrees Skill 多维度简评
综合评分:8.6 / 10 ⭐⭐⭐⭐⭐ 类别:Git / 工作流 / 并行开发 仓库:obra/superpowers 维护者:Jesse Vincent / Prime Radiant 引用:Superpowers README · CSDN 详解 · 掘金原理
一、核心定位与价值
Git worktree 是**“用多个工作区并行开发”**的官方解决方案。using-git-worktrees Skill 强制”开始新功能前先开 worktree”,避免主分支被污染 + 支持并行任务 + 易于回滚。
核心原则:“开始需要与当前工作区隔离的功能工作,或执行实施计划前” 目录选择优先级:
.worktrees/→ 项目内其他目录 → 询问人类 安全:验证.worktrees/在.gitignore中,避免 worktree 内容被 commit
适用场景
- 开始新功能开发
- 多分支并行开发
- 实验性改动(不确定要不要保留)
- 实施一个完整 plan
- 不污染主工作区
不适用场景
- 1 行修改
- 已经有一个 worktree
- 主工作区是干净的,直接用 main
二、核心机制
2.1 什么是 Git Worktree
Git worktree 允许同一个 git 仓库有多个工作目录:
- 主 worktree:
~/projects/myapp(main分支) - 副 worktree:
~/projects/myapp/.worktrees/feature-a(feature-a分支) - 副 worktree:
~/projects/myapp/.worktrees/feature-b(feature-b分支)
共享同一份 .git 目录,但工作区独立。
2.2 优势
| 优势 | 说明 |
|---|---|
| 并行开发 | 3 个 worktree = 3 个 Claude 会话同时跑 |
| 隔离 | 一个 worktree 崩了不影响其他 |
| 快速切换 | 不用 git stash + git checkout |
| 独立依赖 | 每个 worktree 装自己的 node_modules |
| 易回滚 | 直接删除 worktree 目录 |
2.3 跟 git checkout 对比
| 维度 | git checkout | git worktree |
|---|---|---|
| 并行 | ❌ 同一时刻只能在一个分支 | ✅ 多分支并行 |
| 依赖 | 共享一份 | 各自独立 |
| build 缓存 | 共享 | 各自独立 |
| 编辑器 | 切换要 reload | 各自打开 |
| 适用 | 短期切换 | 长期并行开发 |
三、完整工作流
3.1 目录选择优先级
# 优先级 1: .worktrees/ (Skill 首选)
.worktrees/feature-xyzzy -b feature-xyzzy
# 优先级 2: 项目本地其他目录
.worktrees/ 或 .branches/ 等
# 优先级 3: 查看 CLAUDE.md
cat CLAUDE.md | grep -A5 "worktree"
# 优先级 4: 询问用户
"项目没有标准 worktree 目录,放哪?"
3.2 创建 Worktree
# 1. 验证 .worktrees/ 在 .gitignore 中
git check-ignore .worktrees/ || echo "WARNING: .worktrees/ not in .gitignore"
# 2. 创建 worktree + 新分支
git worktree add .worktrees/feature-xyzzy -b feature-xyzzy
# 3. 跑 baseline 测试(确保干净)
cd .worktrees/feature-xyzzy
npm install # 或 pnpm install
npm test # 期望:全部通过
3.3 在 Worktree 中工作
# 4. 编辑代码、提交
git add .
git commit -m "feat: implement feature xyzzy"
# 5. 跑测试
npm test
# 6. 完成后(交给 finishing-a-development-branch)
# - merge / PR / keep / discard
3.4 完整脚本
#!/bin/bash
# 简化版 Skill 行为
set -e
BRANCH=$1
if [ -z "$BRANCH" ]; then
echo "Usage: ./new-worktree.sh <branch-name>"
exit 1
fi
# 1. 验证 .worktrees 忽略
if ! git check-ignore .worktrees/ 2>/dev/null; then
echo "ERROR: .worktrees/ not in .gitignore"
exit 1
fi
# 2. 创建
git worktree add ".worktrees/$BRANCH" -b "$BRANCH"
# 3. 跑 baseline
cd ".worktrees/$BRANCH"
if [ -f "package.json" ]; then
npm install
npm test
elif [ -f "go.mod" ]; then
go mod download
go test ./...
elif [ -f "requirements.txt" ]; then
pip install -r requirements.txt
pytest
fi
echo "Worktree ready at .worktrees/$BRANCH"
四、并行开发实战
4.1 多个 worktree + 多个 Claude
# Terminal 1
cd .worktrees/feature-auth
claude # 一个 Claude 会话
# Terminal 2
cd .worktrees/feature-payment
claude # 另一个 Claude 会话
# Terminal 3
cd .worktrees/bugfix-1234
claude # 第三个 Claude 会话
4.2 典型场景
# 场景:同时处理 3 件事
git worktree add .worktrees/feature-xyz -b feature-xyz
git worktree add .worktrees/fix-1234 -b fix-1234
git worktree add .worktrees/upgrade-react -b upgrade-react
# 3 个 Claude 实例同时跑
# - 终端 1: 开发 feature-xyz
# - 终端 2: 修复 bug 1234
# - 终端 3: 升级 React 19
4.3 Claude Code 团队最爱
“Worktree 模式是 Claude Code 团队提高生产力的最大来源。” —— 来源:Anthropic 内部
具体实践:
- 3-5 个 worktree 并行(人手一个 Claude)
- 命名约定:
feature-xxx、fix-xxx、analysis - 配合
tmux+ shell alias(za / zb / zc) - 一个 “analysis” worktree 只做”读日志 / 跑 BigQuery”不污染主开发
五、与 Superpowers 其他 Skills 配合
| Skill | 配合方式 |
|---|---|
| brainstorming | brainstorm 后开 worktree 实施 |
| writing-plans | plan 写到 worktree 目录 |
| subagent-driven-development | 每个 worktree 派 subagent |
| finishing-a-development-branch | 完成后 merge / PR / 清理 |
| dispatching-parallel-agents | 配合并行 worktree |
完整工作流:
[1] brainstorming
↓
[2] writing-plans (写到 docs/plans/...)
↓
[3] using-git-worktrees (创建 worktree)
↓
[4] subagent-driven-development (派 subagent 实施)
↓
[5] test-driven-development (每个 task)
↓
[6] verification-before-completion (跑测试)
↓
[7] finishing-a-development-branch (merge / PR / 清理)
六、5 大实战技巧
6.1 命名规范
# ✅ GOOD
.worktrees/feature-user-auth
.worktrees/fix-login-redirect
.worktrees/upgrade-react-19
.worktrees/analysis-bigquery
# ❌ BAD
.worktrees/test1
.worktrees/asdf
.worktrees/branch-1
6.2 配合 tmux + alias
# ~/.zshrc
alias za='cd ~/projects/myapp/.worktrees/feature-a && claude'
alias zb='cd ~/projects/myapp/.worktrees/feature-b && claude'
alias zc='cd ~/projects/myapp/.worktrees/feature-c && claude'
6.3 配合并行任务
# 同时跑 5 个 worktree
for branch in auth payment fix-1234 upgrade perf-test; do
git worktree add ".worktrees/$branch" -b "$branch"
done
6.4 清理已完成 worktree
# Skill 自动清理(finishing-a-development-branch)
# 手动清理
git worktree remove .worktrees/feature-xyz
git branch -d feature-xyz # 删除已合并分支
6.5 baseline 测试
# 创建 worktree 后,跑 baseline 确保干净
cd .worktrees/feature-xyz
npm install
npm test
# 期望:全部通过
# 如果失败,可能主分支有 broken test,先修主分支
七、6 大反模式
7.1 worktree 目录没加 .gitignore
# ❌ BAD - worktree 内容被意外 commit
git add .worktrees/ # 灾难
# ✅ GOOD
# .gitignore
.worktrees/
.worktrees/*
!.worktrees/.gitkeep
7.2 同一分支开多个 worktree
# ❌ 错误
git worktree add .worktrees/feature-a -b feature-a
git worktree add .worktrees/feature-a-dup -b feature-a
# Git 报错:branch already checked out
7.3 在主 worktree 改 worktree 子模块
# ❌ BAD
cd main_project
vim .worktrees/feature-a/some_file.go # 不会被 worktree 看到
# ✅ GOOD
cd .worktrees/feature-a
vim some_file.go
7.4 不跑 baseline 就开干
# ❌ 跳到 worktree 直接改代码
git worktree add .worktrees/feature
# 改代码
# commit
# → 主分支可能已经 broken
7.5 长期 worktree 不清理
# ❌ 6 个月后 10 个 worktree 残留
$ git worktree list
.worktrees/feature-a dead
.worktrees/feature-b dead
...
7.6 在 worktree 里 git 操作主分支
# ❌ BAD - 容易冲突
cd .worktrees/feature
git checkout main # 工作区混乱
# ✅ 切回主 worktree
cd ~/projects/myapp
git checkout main
八、Q&A
Q: 跟 git stash 区别? A: stash 是”暂存当前修改”;worktree 是”完全独立的工作区”。
Q: worktree 共享 .git 吗? A: 共享 .git 目录,各自独立的工作区文件。
Q: 性能影响? A: 几乎没有。branch 切换是 O(1)。
Q: 适合 Windows 吗? A: Git 2.5+ 支持,Windows OK。
Q: IDE 支持? A: VS Code / JetBrains 都能打开多个 worktree。
Q: 跟 “git worktree prune” 关系?
A: git worktree prune 清理无效的 worktree 引用。
Q: 必须用 Claude Code 吗? A: 不必须。worktree 本身是 Git 特性,任何场景都适用。
Q: 学习曲线? A: 30 分钟上手,1 天习惯。
九、Prompt 模板
模板 1:创建 worktree
请用 using-git-worktrees 流程:
1. 验证 .worktrees/ 在 .gitignore
2. 创建 .worktrees/feature-user-auth
3. 跑 baseline 测试
4. 准备开始 writing-plans
模板 2:并行 3 个任务
请用 using-git-worktrees + dispatching-parallel-agents:
1. 创建 3 个 worktrees:
- .worktrees/fix-bug-1234
- .worktrees/refactor-payment
- .worktrees/upgrade-deps
2. 在每个里跑 baseline
3. 派 3 个 subagent 并行处理
模板 3:清理
请用 finishing-a-development-branch:
1. 跑全量测试
2. 列出 .worktrees/* 状态
3. 提供选项:merge / PR / keep / discard
4. 清理已选 worktree
十、真实踩坑案例
案例 1:worktree 内容被 commit
现象:git add . 把整个 worktree 文件夹加进去。
根因:.worktrees/ 没在 .gitignore。
解决:立刻 revert + 加 .gitignore。
案例 2:baseline 测试失败
现象:worktree 创建后 npm test 失败。
根因:主分支本来就 broken。
解决:先修主分支,再开 worktree。
案例 3:worktree 占满磁盘
现象:5 个 worktree 各装 200MB node_modules = 1GB。
解决:用 pnpm 共享 store / npm ci --prefer-offline。
案例 4:worktree 残留
现象:3 个月后 8 个 worktree 没人清理。 解决:在 CLAUDE.md 加”每月清理”hook。
案例 5:worktree 跨设备
现象:Mac worktree 拉到 Windows 出问题。
根因:node_modules 平台特定。
解决:rm -rf node_modules && npm install。
案例 6:worktree 中 git pull 失败
现象:git pull 报”ref locked”。
根因:另一个 worktree 在 push。
解决:git worktree list 查所有 worktree 状态。
案例 7:worktree 合并冲突
现象:3 个 worktree 都改同一个文件。 解决:worktree 间串行合并 + rebase。
案例 8:worktree 命名冲突
现象:worktree 目录名跟分支名不一致。
解决:命名规范统一(worktree/branch-name)。
案例 9:IDE 找不到文件
现象:VS Code 打开 worktree 目录但文件不显示。
解决:code . 在 worktree 根目录重新打开。
案例 10:worktree 中 git hooks 不工作
现象:worktree 里 commit 触发不了 hook。
根因:worktree 共享 hooks 但 core.hooksPath 可能不同。
解决:git config core.hooksPath .git/hooks 在 worktree 里设。
十一、真实战绩
| 指标 | 不用 | 用 | 提升 |
|---|---|---|---|
| 并行任务数 | 1 | 3-5 | +400% |
| 主分支污染事故 | 5/月 | 0 | -100% |
| 切换上下文时间 | 5min | 10s | -97% |
| 实验代码保留率 | 50% | 80% | +60% |
十二、与其他工具对比
| 工具 | 用途 | 关系 |
|---|---|---|
| git worktree | 多工作区 | 互补——本 Skill 用它 |
| git stash | 暂存修改 | 互补——短期切换用 stash |
| gh pr | 创建 PR | 互补——完成后用 |
| GitHub Codespaces | 云端开发 | 互补——远程协作 |
| Docker dev container | 容器化开发 | 互补——一致环境 |
十三、安装
# Claude Code
/plugin marketplace add obra/superpowers
/plugin install superpowers@claude-plugins-official
# 通用
npx skills add obra/superpowers --skill using-git-worktrees
# Git worktree 本身是 Git 2.5+ 自带
git --version # >= 2.5
# 验证
git worktree add --help
十四、总结
核心价值:
- 强制隔离工作区
- 支持并行 Claude 会话
- 避免主分支污染
- 易于回滚
- 与 finishing-a-development-branch 配合清理
适用人群:
- 多任务并行开发者
- AI 编程重度用户
- 团队 Lead
- 长期项目维护者
投入产出比:⭐⭐⭐⭐⭐(5/5)—— AI 编程必装。
何时不要用:
- 1 行修改
- 已经在 worktree 里
- 一次性脚本
- 完全干净的主分支(直接用 main)
参考链接:
快速安装
git clone https://github.com/obra/superpowers.git ~/superpowers
mkdir -p ~/.claude/skills
ln -s ~/superpowers/skills/using-git-worktrees ~/.claude/skills/using-git-worktrees