Git Worktree 与并行工作流
- 什么是 git worktree——一个仓库、多个工作目录,每个目录位于各自的分支上
- 它解决的确切问题:避免并行的 Claude 会话在同一批文件上相互冲突
- 用于添加、列出和移除 worktree 的四条命令
- 该技术何时物有所值——以及在合并时会咬人的三个陷阱
- worktree 如何与子智能体组合:跨会话的并行 vs 单个会话内部的并行
git worktree 让一个仓库可以拥有多个工作目录,每个目录都检出到不同的分支。把它与 Claude Code 搭配使用,你就能在同一个项目上并行运行多个会话——每个会话编辑各自的文件,互不冲突。
它解决的问题
如果两个 Claude 会话同时编辑同一个工作目录,它们会因为彼此的改动而互相绊倒。worktree 为每个会话提供各自的目录和分支,因此并行工作在你合并之前一直保持隔离。
基础知识
四条命令撑起了整个工作流程:添加一个 worktree(新目录 + 新分支)、列出已有的 worktree,以及在用完后移除某个 worktree。
Guided walkthrough1 of 4
- 在你的仓库中,git worktree add ../app-feature-a -b feat-a 一次性创建一个新目录以及一个新分支。
- git worktree add ../app-fix-123 -b fix-123 —— 第二个隔离的目录/分支,与第一个并排存在。
- git worktree list 会显示每个工作目录及其所在的分支。
- git worktree remove ../app-feature-a 拆除一个 worktree,这样过期的目录就不会堆积。
四条命令的工作流程
# from your repo git worktree add ../app-feature-a -b feat-a # new dir + new branch git worktree add ../app-fix-123 -b fix-123 git worktree list # when done with one: git worktree remove ../app-feature-a
在每个 worktree 目录中打开一个 Claude Code 会话,让它们各自独立地工作。
何时值得这么做
- 并行的功能/修复,你想同时推进它们。
- 某个长时间运行的任务在一个 worktree 中运行,同时你在另一个 worktree 中继续工作。
- 有风险的实验,与你的主检出隔离开来。
陷阱
- 留意合并回去这一步:分支最终都会合并——冲突会在那时浮现,而不是在编辑过程中。让 worktree 保持聚焦且短命。
- 不要在两个 worktree 中运行带状态的共享资源(同一个开发数据库、同一个端口)而不加以区分。
- 用 git worktree remove 清理,这样过期的目录就不会堆积。
Worktree vs 子智能体
这是两个不同维度的并行——它们不竞争,而是叠加。
| 它并行化什么 | 隔离性 | |
|---|---|---|
| 子智能体 | 在一个会话内部的工作(委派) | 隔离的上下文 |
| Worktree | 跨多个会话在磁盘上的工作 | 隔离的分支/文件 |
它们能很好地组合:位于某个 worktree 中的一个会话,本身可以再派生出子智能体。
- 当你需要两个 Claude 会话同时操作同一个仓库时,使用 worktree;当一个会话需要把一块工作卸载到隔离的上下文中时,使用子智能体。
自我检测
0/4- git worktree = 一个仓库、多个工作目录,每个目录位于各自的分支上——这是无冲突并行 Claude 会话的基础。
- 两个会话在同一个工作目录上会相互绊倒;每个会话一个 worktree 可以让文件和分支保持隔离,直到你合并。
- git worktree add ../dir -b branch 创建目录 + 分支;list 显示它们;remove 进行清理。
- 对于并行的功能/修复、在其他工作之外长时间运行的任务,以及隔离的有风险实验,这么做是值得的。
- 当心合并回去这一步,不要在多个 worktree 之间共享带状态的资源(数据库、端口),并且始终清理——同时记住 worktree 能与子智能体组合。