一个让程序员能同时出现在两个地方、干两件不同事情的“分身术”!
一、先讲个故事:厨房里的“平行宇宙”
想象你是位顶级厨师,正在给客人做佛跳墙(这是你的 main 分支,稳定生产环境)。
突然,老板冲进厨房:“快!研发一道麻辣佛跳墙新品,两小时后要试菜!”
—— 这就是你接到的新功能需求(feature/spicy-soup)。
你怎么办?
- 笨办法:把现在的佛跳墙倒掉,重新做一锅麻辣版 → 客人掀桌(破坏主分支)
- 普通办法:把灶台擦干净,在旁边另起炉灶 → 但厨房太小,调料罐、刀具、水池只有一个(这就是
git switch切换分支的麻烦:你得不停清理工作区、重新安装依赖、重跑测试) - 聪明办法:向老板申请隔壁的空房间,搬一套全新的灶具、调料、餐具过去,独立做麻辣佛跳墙 → 做好后,再把新菜谱拿回主厨房合并
这个“隔壁空房间”就是 Git Worktree!
而 using-git-worktrees 这个技能,就是一个自动帮你找房间、搬设备、检查水电安全、最后告诉你“可以开工了” 的智能管家。
二、为什么需要这个“管家”?(痛点 + 原理)
普通 git branch 的痛点
git checkout -b feature/new-idea # 创建并切换分支
npm install # 重新装依赖(好慢)
npm test # 重新跑测试(好烦)
# 做到一半,紧急要修 main 的 bug
git stash # 存一下
git checkout main # 切回去
# …修完 bug 再切回来,恢复 stash,继续…
这就像只有一个灶台,每次换菜都要把所有锅碗瓢盆搬走再搬回来,非常低效。
Worktree 的原理
Git Worktree 允许你从同一个仓库,在另一个目录里创建一个新的工作副本,并且这个副本可以独立切换分支、独立编译、独立运行测试。
它们共享同一个 .git 文件夹,但工作区是隔离的。
git worktree add ../myproject-hotfix -b hotfix/urgent
cd ../myproject-hotfix
# 现在你可以同时:
# 终端1:在原目录继续开发新功能
# 终端2:在这个新目录修紧急 bug
但手动创建 worktree 有几个坑:
- 把 worktree 放在哪里?要不要提交到仓库?
- 怎么确保这个目录被
.gitignore忽略,否则会被git status污染? - 创建完后,要不要自动装依赖、跑测试,确保基线干净?
- 不同项目(Node/Rust/Python)要用不同命令,每次都手写很烦。
using-git-worktrees 技能就是把这些最佳实践自动化了。
三、管家怎么干活?(结合 Skill 文件拆解)
3.1 第一步:选房间 —— 目录选择策略
管家不会随便把房间开在你家厕所里。它有一套严格的优先级:
-
先看有没有现成的“工作台仓库”
检查项目根目录下有没有.worktrees/或worktrees/文件夹。- 有 → 就用它(
.worktrees优先,因为点开头是隐藏目录,更干净)
- 有 → 就用它(
-
再看主人的“装修说明书” (
CLAUDE.md文件)
如果里面写了类似worktree directory: ~/my-worktrees,就照做。 -
以上都没有,就问主人
- 选项 A:
.worktrees/(项目内隐藏,不碍眼) - 选项 B:
~/.config/superpowers/worktrees/<项目名>/(全局位置,适合多项目共用)
- 选项 A:
故事里:管家发现主厨房旁边有个空房间(.worktrees),马上征用。
3.2 第二步:安全验证 —— 防止“污染”主仓库
如果房间是项目内的(比如 .worktrees/),管家必须确认这个目录被 Git 忽略了。
否则,你在这个目录里改的文件会被 git status 显示为“未跟踪”,万一不小心 git add . 就全提交上去了,灾难!
管家做法:
git check-ignore -q .worktrees
- 如果返回 0(被忽略)→ 安全
- 如果返回 1(没被忽略)→ 立刻修复:把
.worktrees/加入.gitignore并提交这个改动
故事里:管家拿试电笔检查墙壁插座(git check-ignore),发现漏电,马上叫电工修好(加 .gitignore),然后再搬设备。
3.3 第三步:创建房间 + 开新分支
git worktree add .worktrees/feature-xyz -b feature/xyz
cd .worktrees/feature-xyz
管家会自动:
- 用当前项目名(比如
myproject)和分支名组成路径 - 创建一个新分支(不会影响你原来的工作区)
3.4 第四步:自动布置设备 —— 运行项目设置
根据项目类型,管家会自动装依赖:
| 项目类型 | 检测文件 | 自动运行 |
|---|---|---|
| Node.js | package.json | npm install |
| Rust | Cargo.toml | cargo build |
| Python | requirements.txt 或 pyproject.toml | pip install / poetry install |
| Go | go.mod | go mod download |
故事里:管家知道你要做麻辣佛跳墙,自动搬来了四川花椒、郫县豆瓣、高压锅(npm install),全部摆好。
3.5 第五步:试菜 —— 验证测试基线
管家会运行测试命令(npm test / cargo test / pytest / go test),确保新房间的菜品质量一开始就是合格的。
- 如果测试通过 → 报告“可以开工”
- 如果测试失败 → 报告失败详情,问你要不要继续(可能是原项目本身就有 bug,不能怪新房间)
3.6 第六步:告诉你房间地址
管家最后说:
Worktree ready at /Users/chef/myproject/.worktrees/feature/spicy-soup
Tests passing (47 tests, 0 failures)
Ready to implement spicy soup feature
你只需要 cd 进去,然后像正常项目一样开发即可。 原来的主目录完全不受影响,可以继续做佛跳墙。
四、完整时序图(用 Mermaid 画给你看)
下面这张图展示了“你 - 管家 - Git - 项目”之间的交互过程:
五、最佳用法
✅ 什么时候用这个技能?
- 你准备实现一个新功能,且已有设计方案(比如 brainstorm 技能结束)
- 你要并行修多个 bug,不想频繁切换分支
- 你要做实验性改动,怕把主分支搞乱
- 你被
subagent-driven-development或executing-plans技能调用时(它们会强制要求先用 worktree)
✅ 三个“不要”
- 不要手动创建 worktree 然后忘了加
.gitignore→ 管家自动搞定 - 不要在 worktree 里直接改主分支 → 管家每次创建新分支
- 不要跳过测试基线验证 → 管家强制跑测试,避免把老 bug 当新 bug
✅ 两个“总是”
- 总是用管家推荐的目录(.worktrees/ 或全局目录),保持团队一致
- 工作完成后,用
finishing-a-development-branch技能清理(它会帮你合并、删除 worktree)
✅ 实际命令 vs 管家自动化
| 手动操作 | 管家自动做 |
|---|---|
mkdir .worktrees | 自动检测/询问 |
echo ".worktrees/" >> .gitignore | 自动检查并修复 |
git worktree add ... -b ... | 自动执行 |
npm install | 自动检测并运行 |
npm test | 自动运行并报告 |
| 记住路径 | 自动告诉你 |
六、最后的一个真实场景模拟
你:我想给电商项目加一个“积分兑换”功能。
管家:好嘞,我用using-git-worktrees技能。
(管家检查发现已有.worktrees/且被忽略)
(创建.worktrees/feature/points-exchange)
(检测到package.json,运行npm install)
(运行npm test→ 48 个测试全部通过)
管家:工作台已准备好,在/home/you/shop/.worktrees/feature/points-exchange,测试全绿,可以开始写积分兑换逻辑了。
你:太棒了!然后你打开另一个终端,继续修主分支的 bug,两边同时进行,互不干扰。
七、总结
using-git-worktrees 就是一个帮你“一键创建平行开发宇宙”的智能助手。
它遵循“先找现成房间 → 检查安全 → 开新分支 → 自动装依赖 → 跑测试 → 报告位置”的黄金流程,让你彻底告别 git stash 和切换分支的痛苦。
记住:你不是在学一个新命令,而是在召唤一个管家。 以后当你需要隔离开发时,直接说:“管家,给我一个新工作台!” 它就会按这套魔法流程帮你搞定一切。
现在,去试试你的第一个平行宇宙吧! 🚀