文章目录
- 一、开场:当 AI 开始"精神分裂"
- 二、传统分支切换:一场永无止境的"渣男行为"
- 2.1 你 stash 的样子,像极了塞脏衣服
- 2.2 当 AI 开始"多人运动"
- 三、一句话看懂 worktree:Git 的"影分身术"
- 3.1 官方定义 vs 人话翻译
- 3.2 目录结构长啥样?
- 四、worktree 的三大核心优势:为什么它比"克隆三份仓库"更香
- 4.1 优势一:再也不用 stash 来 stash 去了
- 4.2 优势二:同时跑多个版本,互不干扰
- 4.3 优势三:AI 工具的"完美隔离舱"
- 五、手把手实操:从创建到清理,比点外卖还简单
- 5.1 先看看你开了几个"平行宇宙"
- 5.2 创建新的 worktree:三种姿势
- 5.3 删除 worktree:退房记得办手续
- 六、AI 工具避坑指南:为什么 Claude 改了代码没效果?
- 6.1 坑点:AI 在隔壁装修,你在主卧验收
- 6.2 避坑技巧一:简单修改直接关 worktree
- 6.3 避坑技巧二:复杂任务必须隔离
- 6.4 避坑技巧三:.env 文件不会自动跟过去
- 6.5 避坑技巧四:把 .claude/worktrees/ 加进 .gitignore
- 七、总结:人生苦短,别在分支切换上浪费时间
P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。
一、开场:当 AI 开始"精神分裂"
朋友们,最近我同时在 macOS 和 Windows 上用 Codex 和 Claude Desktop 写代码,结果被一个叫 worktree 的东西搞到怀疑人生。
事情是这样的:我让 AI 改了一段代码,它信誓旦旦说"改好了",我刷新页面——纹丝不动。再刷新——还是老样子。再刷新——浏览器都怀疑我在 DDOS 它。
我当时就懵了,心想:是我瞎了?还是 AI 在骗我?还是这代码跟我玩量子纠缠,观测了就坍缩?
后来一查,好家伙,原来是 worktree 在跟我搞地下情。AI 在隔壁房间(worktree)里改得热火朝天,我在主卧(主目录)里刷新了一万次,刷新了个寂寞。
这感觉就像:你请了个装修队在隔壁楼装修,你天天回自己家检查验收,然后骂装修队偷懒。装修队也很委屈啊——“大哥,我在 302 干活,你天天回 301 看啥呢?”
今天我就结合踩过的坑,带你把 worktree 这个"Git 界的影分身术"彻底整明白。
二、传统分支切换:一场永无止境的"渣男行为"
2.1 你 stash 的样子,像极了塞脏衣服
先回忆一下咱们平时的开发流程。
你在 main 分支上吭哧吭哧写新功能,代码写到一半,产品经理突然冲进来说:“线上崩了!用户正在微博上骂我们!”
你怎么办?git stash,把写到一半的代码往床底下一塞,切到 hotfix 分支修 bug。修完再切回 main,git stash pop,从床底下把脏衣服掏出来继续穿。
这操作在小项目里没问题,但在 AI 编程时代,这简直就是一场灾难。
2.2 当 AI 开始"多人运动"
现在咱们用 AI 写代码,那阵仗跟以前完全不一样了:
- 你想让 Claude 重构旧模块,同时让 Codex 开发新功能
- 你想让一个主 Agent 带着三个子 Agent 并行跑任务
- 你甚至想让 AI 一边写代码一边写单元测试一边写文档
如果全挤在一个目录里切来切去,那场面就像:
五个厨师挤在一个厨房里,A 在切菜,B 在炒菜,C 在洗碗,D 在拖地,E 在拆灶台。最后端上来一盘"代码大乱炖",里面既有 bug 又有 feature,还有半拉子重构。
更惨的是,AI 的上下文会互相污染。你在 A 会话里聊的是支付模块,切到 B 会话里 AI 还在惦记着支付模块,token 就这么白白浪费了。这感觉就像你跟女朋友聊前任,聊完发现现任也在旁听—— token 烧得比你的感情还快。
所以 worktree 就是为了终结这场"代码版换乘恋爱"而生的。
三、一句话看懂 worktree:Git 的"影分身术"
3.1 官方定义 vs 人话翻译
官方说法:worktree 允许一个仓库关联多个工作目录。
人话翻译:同一个 Git 仓库,开出多个"平行宇宙",每个宇宙里干不同的活。
你可以把同一个仓库的不同分支,分别放到不同的文件夹里。它们看起来是三个独立的项目,但底层共用同一个 Git 数据库——就像三胞胎共用一个大脑,但各自有独立的人格。
3.2 目录结构长啥样?
假设你的主项目叫 my-project,用了 worktree 之后:
- my-project(主宇宙):main 分支,稳如老狗
- my-project/login(平行宇宙 A):feature-login 分支,搞登录
- my-project/hotfix(平行宇宙 B):hotfix 分支,救火
这感觉就像你买了三套房,装修风格各不相同,但房产证都是你的名字。更妙的是,这三套房共用同一个水电表(Git 对象数据库),省钱!
四、worktree 的三大核心优势:为什么它比"克隆三份仓库"更香
4.1 优势一:再也不用 stash 来 stash 去了
以前切分支:git stash → git checkout → 干活 → git checkout → git stash pop。
现在切分支:cd …/另一个文件夹。
这感觉就像以前你约会要换衣服,现在你有三个家,每个家里住一个对象——啊不是,每个文件夹里跑一个分支。效率直接拉满,再也不用把脏代码塞床底下了。
4.2 优势二:同时跑多个版本,互不干扰
你可以在主目录跑 npm run dev 调试主分支,在 worktree 里跑另一个端口测试新功能。
这画面就像:你在家看电视,隔壁 worktree 里 AI 在蹦迪。你们共用一面墙(Git 仓库),但互不打扰。唯一的区别是,如果 AI 在隔壁把墙拆了(改坏了代码),你家(主目录)还是完整的。
4.3 优势三:AI 工具的"完美隔离舱"
这是最关键的一点!像 Claude Code 这类工具,利用 worktree 可以实现完美的任务隔离:
- 每个 AI 会话独占一个 worktree,就像每个实习生都有独立工位
- AI 在 worktree 里把代码改得稀烂?直接 rm -rf 删掉,主目录毫发无损
- 改好了再合并回来,安全又高效
这感觉就像:你请了个试吃员(AI)在隔壁厨房试菜,试吃员把盐当糖放了,你直接把隔壁厨房炸了(删除 worktree),自家厨房(主目录)的满汉全席安然无恙。
五、手把手实操:从创建到清理,比点外卖还简单
别被概念吓到,实际操作比你女朋友的情绪还简单。
5.1 先看看你开了几个"平行宇宙"
git worktree list
这命令会列出所有工作树。输出大概长这样:
/path/to/my-project abcd1234 [main] /path/to/my-project-login efgh5678 [feature/login]就像查房产证,看看你名下到底有几套房。
5.2 创建新的 worktree:三种姿势
姿势一:基于已有分支创建(最常用)
git worktree add …/my-project-login feature/login
这会在上级目录创建 my-project-login 文件夹,并检出 feature/login 分支。
翻译成人话:你给 feature/login 分支买了一套新房,拎包入住。
姿势二:创建全新分支(一步到位)
git worktree add -b feature/payments …/payments main
基于 main 分支新建 feature/payments 分支,并在 …/payments 目录检出。
翻译成人话:你不仅买了新房,还顺手给房子起了个新名字(新分支)。
姿势三:创建临时实验目录(搞事情专用)
git worktree add -d …/debug-dir
这会创建一个"分离 HEAD"的工作树,适合临时测试。
翻译成人话:你租了个民宿,想在里面搞点实验(比如试试把代码全删了会不会编译通过),搞完就跑,不留名。
5.3 删除 worktree:退房记得办手续
用完之后一定要清理!不然 Git 会以为你名下还有一套房,以后查房产证的时候看着闹心。
git worktree remove …/my-project-login
如果你已经手动把文件夹删了(暴力退房),Git 那边还有记录,用这条命令销户:
git worktree prune
翻译成人话:你把房子炸了,但房管局还有备案,这条命令就是去房管局说一声"那房子真没了,别收我房产税了"。
六、AI 工具避坑指南:为什么 Claude 改了代码没效果?
6.1 坑点:AI 在隔壁装修,你在主卧验收
回到开头那个灵魂问题:为什么在 Claude Desktop 里改代码,刷新页面没效果?
因为 Claude Code 桌面版默认会为每个新会话自动创建一个 worktree!而且它通常藏在 .claude/worktrees/ 文件夹里。
这感觉就像:你请了个装修队,他们默认在隔壁 302 施工。你天天回自己家(主目录)刷新页面,当然看不到变化。你还得专门跑到 302 去看,或者把装修成果搬回 301。
6.2 避坑技巧一:简单修改直接关 worktree
如果是改个变量名、调个样式这种小事,直接让 AI 在主目录干活。别整那些花里胡哨的,就像去楼下买瓶酱油,没必要开跑车。
6.3 避坑技巧二:复杂任务必须隔离
如果是重构、大改、或者让多个 AI 并行工作,一定要开 worktree。一个任务一个目录,互不打架。这感觉就像:你请了两个厨师,一个做川菜一个做粤菜,必须分厨房,不然最后端上来的是"麻辣白切鸡"。
6.4 避坑技巧三:.env 文件不会自动跟过去
worktree 是全新的检出,.env 这种被 .gitignore 忽略的文件不会自动复制过去。
这感觉就像:你搬家了,但钥匙还在旧房子里。你可以在项目根目录建一个 .worktreeinclude 文件,告诉 Claude 哪些配置要自动复制过去。
6.5 避坑技巧四:把 .claude/worktrees/ 加进 .gitignore
不然你的主仓库里会多出一堆未跟踪文件,看着跟牛皮癣一样。加进 .gitignore 之后,Git 就假装看不见它们,眼不见心不烦。
七、总结:人生苦短,别在分支切换上浪费时间
- 简单项目:直接在主目录改,别给自己加戏。就像去便利店,走路去就行,别叫直升机。
- 复杂项目/AI 并行:一定要用 worktree 做隔离。一个任务一个目录,各干各的,互不打架。
- 核心禁忌:同一个分支不能同时被两个 worktree 使用,Git 会拒绝创建。这很好理解——你不能同时出现在两个平行宇宙里,除非你是闪电侠。
搞懂了 worktree,你不仅能避免"改了代码不生效"这种低级错误,还能在 AI 编程时代更高效地调度多个智能体并行工作。
下次再遇到 AI 说"改好了"但页面没变化,别急着骂 AI 骗人。先检查一下:你是不是又在主卧刷新,而 AI 在隔壁 302 干得热火朝天?
赶紧在你的下一个项目里试试吧!如果还是搞不定,欢迎来评论区吐槽,咱们一起骂 Git 的设计者——当然,是在各自的 worktree 里骂,互不干扰。
P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。