
2026/03/30
Worktree 是临时的么?
大多数时候是。worktree 更像任务级的临时工作间:开始时建,结束后删,真正留下来的是 commit。
是的,通常是临时的。
在多任务或多 Agent 的工作流里,worktree 更像一个随着任务生命周期存在的临时工作间。
用酒店房间来比,基本差不多
拿酒店房间来比,基本就能说明白:
Agent 来了 -> 开房(git worktree add)
任务进行中 -> 在房间里工作、改代码、提交
任务结束 -> 退房(git worktree remove)
房间会被拆掉
但住客留下的代码提交会保留在 Git 历史中一个典型生命周期
多数 worktree 都是短生命周期:
t0 收到任务
t1 创建 worktree
t2 Agent 在 worktree 中工作并提交
t3 主仓库合并分支
t4 删除 worktree 和临时分支例如:
git worktree add /tmp/task-001 -b refactor-user
git worktree add /tmp/task-002 -b fix-payment
任务完成后:
git merge refactor-user
git merge fix-payment
git worktree remove /tmp/task-001
git worktree remove /tmp/task-002
git branch -d refactor-user
git branch -d fix-payment这里需要注意的是,被删除的是工作目录本身,不是其中已经提交到 Git 的代码历史。
为什么不建议把它们长期常驻?
主要有三个原因:
- 资源浪费
- 分支占用
- 状态腐化
1. 资源浪费
每个 worktree 都是一整套源码文件树。任务已经结束却还一直保留这些目录,通常没有意义。
2. 分支占用
Git 有一个明确规则:同一个分支不能同时被多个 worktree checkout。
如果一个 worktree 长期挂着不清理,对应分支就会一直被占住。
fatal: 'refactor-user' is already checked out at '/tmp/task-001'3. 状态腐化
一个 worktree 放得越久,它和主分支的偏差就越大。这样不但增加合并成本,也会让后续维护越来越混乱。
所以长期常驻的 worktree 往往不是好信号。目录是临时的,真正要留下的是 Git 历史。


