最近很多朋友像我一样,同时在 macOS 和 Windows 上用 Codex 和 Claude Desktop 写代码,结果被一个叫 worktree 的东西搞懵了。
明明让 AI 改了代码,刷新页面却一点效果都没有?大概率就是你不知不觉掉进了 worktree 的"坑"。
这篇文章就结合我真实的踩坑经历,带你彻底搞懂 Git worktree 到底是什么、为什么在 AI 编程时代它突然火了,以及到底该怎么用。
一、为什么传统分支切换不够用了?
先回想一下我们平时的开发流程。普通 Git 仓库里,你在一个目录中只能同时处于一个分支:
- 在
main分支做日常开发 - 突然要修一个紧急 bug,就得
git stash暂存代码,切到hotfix分支 - 修完再切回
main,恢复之前的代码
这种方式在小项目里没问题。但在 AI 编程时代,痛点就出现了:
- 你想让 AI 一边重构旧模块,一边开发新功能
- 或者让 Codex 和 Claude 同时在不同分支干活
- 甚至让一个主 Agent 带着多个子 Agent 并行跑任务
如果都在同一个目录里切来切去,不仅容易搞乱未提交的代码,AI 的上下文也会互相污染,白白浪费宝贵的 token 配额。
worktree 就是为了解决这个问题而生的。
二、一句话看懂 worktree
worktree = 同一个 Git 仓库,开出多个"工作目录",同时干不同的活。
Git 允许一个仓库关联多个工作目录 。这意味着你可以把同一个仓库的不同分支,分别放到不同的文件夹里。
比如你有主项目 my-project,现在想同时开发登录功能和修 bug,用 worktree 后你的目录结构会变成这样:
my-project(主工作树):保持在main分支my-project/login(链接工作树):检出feature-login分支my-project/hotfix(链接工作树):检出hotfix分支
它们看起来是三个独立的项目目录,但底层共用同一个 Git 仓库数据(提交历史、对象数据库等)。
三、worktree 的核心优势
相比传统的克隆多个仓库或者频繁切分支,worktree 有三大好处:
-
不用频繁切分支
不用再
stash来stash去。想切分支?直接换个文件夹就行。每个目录独立拥有自己的 HEAD、暂存区和工作区 。 -
可以同时跑多个版本
比如你在主目录跑
npm run dev调试主分支,同时在 worktree 目录跑另一个端口的服务测试新功能,两边互不干扰。 -
完美适配 AI 编程工具
这是最关键的一点!像 Claude Code 这类工具,利用 worktree 可以实现完美的任务隔离 :
- 每个 AI 会话独占一个 worktree
- 改坏了直接删掉 worktree,主目录代码毫发无损
- 改好了再合并回来,安全又高效
四、手把手实操:从创建到清理
别被概念吓到,实际操作非常简单。
1. 查看已有的 worktree
git worktree list
这会列出当前仓库所有的工作树及其状态 。
2. 创建新的 worktree
- 基于现有分支创建:
bash
git worktree add ../my-project-login feature/login
这会在上级目录创建 my-project-login文件夹,并检出 feature/login分支 。
- 创建全新分支:
bash
git worktree add -b feature/payments ../payments main
基于 main分支创建 feature/payments分支,并在新目录 ../payments中检出 。
- 创建临时实验目录(不关联分支) :
bash
git worktree add -d ../debug-dir
这会在当前提交上创建一个"分离 HEAD"的工作树,非常适合临时测试 。
3. 删除 worktree
用完之后一定要记得清理!
arduino
git worktree remove ../my-project-login
如果目录已经被你手动删掉了,可以用这条命令清理残留的元数据记录:
git worktree prune
五、AI 工具里的 worktree 避坑指南
回到我开头的困惑:为什么在 Claude Desktop 里改代码没效果?
因为 Claude Code 桌面版默认会为每个新会话自动创建一个 worktree !而且它通常会把 worktree 放在当前项目根目录下的 .claude/worktrees/文件夹里。
如果你没注意到这一点,在主目录启动服务,却让 AI 在 worktree 目录改代码,那刷新一万次页面也不会有变化。
进阶技巧:
- 想省事:如果是简单的修改,直接关掉 worktree 选项,在主目录干活就行。
- 想隔离:让 AI 在 worktree 里随便折腾,改好了再合并。
- 配置复制 :worktree 是全新的检出,
.env这类被忽略的文件不会自动带过去。你可以在项目根目录建一个.worktreeinclude文件,告诉 Claude 自动复制哪些配置过去 。 - 防污染 :记得把
.claude/worktrees/加到你的.gitignore里,免得它出现在主仓库的未跟踪文件列表里 。
六、总结
- 简单项目:直接在主目录改,别给自己加负担。
- 复杂项目/AI 并行:一定要用 worktree 做隔离,一个任务一个目录,互不打架。
- 核心禁忌:同一个分支不能同时被两个 worktree 使用,Git 会拒绝创建以避免混乱 。
搞懂了 worktree,你不仅能避免"改了代码不生效"的低级错误,还能在 AI 编程时代更高效地调度多个智能体并行工作。赶紧在你的下一个项目里试试吧!