LogoSteve
  • 博客
  • 关于我
Worktree 是临时的么?
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. 资源浪费
  2. 分支占用
  3. 状态腐化

1. 资源浪费

每个 worktree 都是一整套源码文件树。任务已经结束却还一直保留这些目录,通常没有意义。

2. 分支占用

Git 有一个明确规则:同一个分支不能同时被多个 worktree checkout。

如果一个 worktree 长期挂着不清理,对应分支就会一直被占住。

fatal: 'refactor-user' is already checked out at '/tmp/task-001'

3. 状态腐化

一个 worktree 放得越久,它和主分支的偏差就越大。这样不但增加合并成本,也会让后续维护越来越混乱。

所以长期常驻的 worktree 往往不是好信号。目录是临时的,真正要留下的是 Git 历史。

全部文章

作者

avatar for Steve
Steve

分类

  • Development
用酒店房间来比,基本差不多一个典型生命周期为什么不建议把它们长期常驻?1. 资源浪费2. 分支占用3. 状态腐化

更多文章

Multi-Agent Worktree 是 Git Worktree 么?
Development

Multi-Agent Worktree 是 Git Worktree 么?

是的,就是把 git worktree 用在 Agent 协作上:同一个仓库,多份工作目录,尽量别让并行改动互相踩文件。

avatar for Steve
Steve
2026/03/30
如何看待 Agent 记忆?
AI

如何看待 Agent 记忆?

我更倾向按需记忆,而不是默认自动记忆。难点从来不是“要不要记”,而是记什么、什么时候记,以及怎么避免记忆变成噪音。

avatar for Steve
Steve
2026/03/30
Agent vs Harnessed Agent
AIDevelopment

Agent vs Harnessed Agent

Claude Code 适合高交互的探索;要把 Agent 拉进长程、可恢复、可审计的工程流程里,最后还是得靠代码去约束执行。

avatar for Steve
Steve
2026/03/30
LogoSteve

Steve 的博客

© 2026 Steve