Git worktree
git worktree 可以让一个仓库同时暴露出多个工作目录。你不需要为了并行开发反复重新 clone 仓库,而是可以在同一个仓库对象库之上,同时检出多个分支。 它特别适合这些场景:
- 一个功能还没做完,但你要立刻修线上 bug
- 想单独开一个干净目录做 review 或实验,不想来回 stash
- 多个 AI agent 需要各自独立的工作目录
- 想把两个分支并排打开比较
为什么不用多 clone
相对重复 clone,同一个仓库下用 worktree 的好处是:- 通常更快
- 更省磁盘空间
- 共用一套仓库历史和对象库
- 每个 worktree 仍然有自己的
HEAD、index 和工作目录
一个仓库,多个 checkout。
常用命令
从已有分支创建一个 worktree
../docs-fix 创建一个新工作目录,并检出 docs-fix 分支。
创建 worktree 时顺便新建分支
查看当前所有 worktree
删除一个 worktree
清理失效元数据
prune。
一个实际工作流
假设你的主仓库在:project:正常主线开发project-feature-a:新功能project-login-fix:线上修复
stash、switch、rebase 要干净得多。
为什么它特别适合 AI agent
对多 agent 编码来说,git worktree 几乎是最简单也最稳的默认方案之一。
因为每个 agent 都可以拥有:
- 自己独立的目录
- 自己独立检出的分支
- 自己的构建产物和临时文件
- 更低的未提交改动互相踩踏风险
一个简单模式
几条重要规则
1)不要在两个 worktree 里同时检出同一个分支
Git 通常会帮你拦住大多数这种情况,但原则上要记住:- 一个分支
- 一个活跃 worktree
2)尽量用 Git 删除 worktree
优先这样删:rm -rf 目录。如果你确实手工删了目录,记得补一条:
3)有需要时启用 worktree 专属配置
默认情况下,大部分配置还是共享主仓库的.git/config。如果你想让某些配置只存在于某一个 worktree,可以启用:
哪些是共享的,哪些是独立的
共享
- 仓库对象库
- 大部分 refs
- 正常仓库历史
- 默认主配置
每个 worktree 独立
HEAD- index
- 工作目录内容
- 部分 per-worktree refs / pseudorefs
- 可选的
config.worktree
适合的场景
- 并行开发多个功能
- 大重构进行中,突然插入 hotfix
- 多 agent 各自负责一条 implementation lane
- 想开一个独立目录做实验,不打扰当前工作
- 仓库很大,不想重复完整 clone
什么情况下还是 full clone 更合适
如果你需要的是:- 完全独立的 Git 配置和凭证环境
- 不同 remote / fork 关系
- 彻底隔离的实验空间
- 在非常不同的仓库状态上长期独立演进
顺手一提:Git 2.54
今天的 Git 生态里还有一个相关更新:Git 2.54。它新增了实验性的
git history 命令,让一些简单历史改写更直接,也把 geometric repacking 变成了默认的手动维护策略。
不过对于日常并行开发来说,真正最值得先掌握的仍然是 git worktree。
