using-git-worktrees

工程开发 社区 @obra
信任分
88/100
兼容 Agent
1
速查档案 只列事实:领域、Agent、信任分、作者、原文章节。装与不装请看下方作者解读。
领域
工程开发
兼容 Agent
Claude Code
信任分
88 / 100 · 社区维护
作者 / 版本 / 许可
@obra · 未声明 license
安装命令数
1 条

需要注意: 未限定 allowed-tools,默认拥有全部工具权限。

想读作者英文原文? ↓ 滚到正文区切换 · 在 GitHub 查看 ↗

解读由编辑根据原文凝练而成,命令、链接、术语均与作者原文一致;想看完整论述请切到右侧

using-git-worktrees 把「在隔离工作区干活」这件事流程化:先检测当前是不是已经在 worktree(不要重复造)→ 优先用平台原生 worktree 工具 → 都没有再回退到手写 git worktree add核心原则:先检测、再原生、最后 git,永远不要跟 harness 对抗

设计思路

作者发现 agent 最常见的错误是「不查就建」——在已是 worktree 的目录里再跑一次 git worktree add,结果一堆嵌套;或者在主 checkout 里直接动手破坏用户分支。技能强制 Step 0 必须先探测,并对子模块(submodule)这个特殊场景设了专门的 guard。

Step 0 — Detect Existing Isolation

GIT_DIR=$(cd "$(git rev-parse --git-dir)" && pwd -P)GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" && pwd -P)BRANCH=$(git branch --show-current)。判断:GIT_DIR != GIT_COMMON 通常意味着「已在 linked worktree」,但子模块也满足这个条件——所以再跑 git rev-parse --show-superproject-working-tree 排除子模块。已是 worktree → 跳到 Step 3 Project Setup,不要再造一个;on a branch / detached HEAD 分别报告状态。GIT_DIR == GIT_COMMON 或在子模块里 → 是普通 checkout,问用户是否同意建 worktree(除非用户已声明偏好)。

Step 1 — Create Isolated Workspace

1a 原生 worktree 工具优先:找 EnterWorktree / WorktreeCreate / /worktree slash command / --worktree flag——有就用,自动管目录与分支与清理;1b 回退到 git worktree add:手写时按命名规范放在 .claude/worktrees/<branch> 或同级目录,明确 branch 名与 base ref。

适合谁

  • 多任务并行(一个分支 review、一个分支开新需求),不希望在同一 checkout 反复 git stash
  • agent 派发到 isolated 上下文工作,避免污染主分支
  • 经常处理 hotfix + feature 同时进行的工程

何时不要用

  • 仓库小、操作简短:直接在主 checkout 工作即可
  • 项目用 monorepo 工具(Nx / Turborepo)已自带隔离构建:worktree 反而是叠加复杂度

配套

autoplan / writing-plans(计划阶段先选 worktree)、subagent-driven-development(subagent 在 worktree 中干)、ship(合并前从 worktree 跑 /ship)、unfreeze(合并前清掉冻结)。