git worktree 是一个单独的工作目录,具有自己的文件和分支,但与主检出共享相同的存储库历史和远程。在自己的 worktree 中运行每个 Claude Code 会话意味着一个会话中的编辑永远不会触及另一个会话中的文件,因此您可以让 Claude 在一个终端中构建功能,同时在第二个终端中修复错误。 本页涵盖 CLI 中的 worktree 隔离。下面的所有内容都假设使用 git 存储库。对于其他版本控制系统,请参阅非 git 版本控制。桌面应用会为每个新会话自动创建一个 worktree。 Worktrees 是运行 Claude 并行的几种方式之一。它们隔离文件编辑,而子代理和代理团队协调工作本身。请参阅并行运行代理来比较这些方法,或跳到使用 worktrees 隔离子代理以同时使用 worktrees 和子代理。Documentation Index
Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
在 worktree 中启动 Claude
传递--worktree 或 -w 来创建隔离的 worktree 并在其中启动 Claude。默认情况下,worktree 在您的存储库根目录下的 .claude/worktrees/<value>/ 下创建,在名为 worktree-<value> 的新分支上:
WorktreeCreate hook。在另一个终端中使用不同的名称再次运行该命令以启动第二个隔离会话:
bright-running-fox:
EnterWorktree 工具创建一个。
在首次在目录中使用 --worktree 之前,请通过在该目录中运行一次 claude 来接受工作区信任对话框。如果尚未接受信任,--worktree 将以错误退出并提示您首先在目录中运行 claude,包括与 -p 结合使用时。
选择基础分支
Worktrees 从您的存储库的默认分支origin/HEAD 分支,因此它们从与远程匹配的干净树开始。如果未配置远程或获取失败,worktree 会回退到您当前的本地 HEAD。要始终从本地 HEAD 分支,请在设置中将 worktree.baseRef 设置为 "head"。将 baseRef 设置为 "head" 会使新 worktrees 携带您未推送的提交和功能分支状态,这在隔离需要在进行中的工作上操作的子代理时很有用。该设置仅接受 "fresh" 或 "head",不接受任意 git refs:
# 为前缀的 PR 编号或完整的 GitHub 拉取请求 URL。Claude Code 从 origin 获取 pull/<number>/head 并在 .claude/worktrees/pr-<number> 创建 worktree:
WorktreeCreate hook,它完全替代默认的 git worktree 逻辑。
将 gitignored 文件复制到 worktrees
Worktree 是一个新的检出,因此来自您主存储库的未跟踪文件(如.env 或 .env.local)不存在。要在 Claude 创建 worktree 时自动复制它们,请将 .worktreeinclude 文件添加到您的项目根目录。
该文件使用 .gitignore 语法。只有匹配模式且也被 gitignored 的文件才会被复制,因此跟踪的文件永远不会被重复。
此 .worktreeinclude 将两个 env 文件和一个 secrets 配置复制到每个新 worktree:
.worktreeinclude
--worktree 创建的 worktrees、子代理 worktrees 和桌面应用中的并行会话。
使用 worktrees 隔离子代理
子代理可以在自己的 worktrees 中运行,以便并行编辑不会冲突。要求 Claude “为您的代理使用 worktrees”,或通过向 frontmatter 添加isolation: worktree 在自定义子代理上永久设置它。每个子代理都会获得一个临时 worktree,当子代理完成且没有更改时会自动删除。
清理 worktrees
当您退出 worktree 会话时,清理取决于您是否进行了更改:- 无更改:worktree 及其分支会自动删除
- 存在更改或提交:Claude 提示您保留或删除 worktree。保留会保留目录和分支,以便您稍后可以返回。删除会删除 worktree 目录及其分支,丢弃所有未提交的更改和提交
- 非交互式运行:使用
--worktree和-p创建的 worktrees 不会自动清理,因为没有退出提示。使用git worktree remove删除它们
cleanupPeriodDays 设置,前提是它们没有未提交的更改、没有未跟踪的文件和没有未推送的提交。使用 --worktree 创建的 Worktrees 永远不会被此扫描删除。
手动管理 worktrees
要完全控制 worktree 位置和分支配置,请直接使用 Git 创建 worktrees。当您需要检出特定的现有分支或将 worktree 放在存储库外时,这很有用。 在新分支上创建 worktree:非 git 版本控制
Worktree 隔离默认使用 git。对于 SVN、Perforce、Mercurial 或其他系统,请配置WorktreeCreate 和 WorktreeRemove hooks 以提供自定义创建和清理逻辑。因为 hook 替代了默认的 git 行为,当您使用 --worktree 时,.worktreeinclude 不会被处理。改为在您的 hook 脚本内复制任何本地配置文件。
此 WorktreeCreate hook 从 stdin 读取 worktree 名称,检出一个新的 SVN 工作副本,并打印目录路径,以便 Claude Code 可以将其用作会话的工作目录:
WorktreeRemove hook 配对以在会话结束时进行清理。有关输入架构和删除示例,请参阅 hooks 参考。