5分钟跑通git Worktree
1. 2026-07-26T07:22:18.080
用户
我现在D:\git-play\git-test 练习在idea使用Worktree 。请给简单实操让我练习一下
AI
周日早晨练技术,这状态太棒了!给你一套5分钟跑通的极简实操,直接在 IDEA 的 Terminal 里敲。
🛠️ 第一步:准备基础仓库(如果还没 init)
在 IDEA 打开 D:\git-play\git-test,底部打开 Terminal:
# 1. 初始化仓库(如果已经是git仓库就跳过这步)
git init
git checkout -b main
# 2. 建个基础文件并提交
echo "Hello from main branch" > README.md
git add .
git commit -m "init: main branch"
🌳 第二步:创建 Worktree
继续在 Terminal 里敲(注意路径是上级目录):
# 在 D:\git-play\ 下创建一个叫 git-test-wt1 的目录,并检出 feat-wt1 分支
git worktree add ../git-test-wt1 -b feat-wt1
敲完 git worktree list 看看,应该能看到两个目录:
D:/git-play/git-test abc1234 [main]
D:/git-play/git-test-wt1 def5678 [feat-wt1]
🪟 第三步:在 IDEA 中打开 Worktree
File→Open→ 选择D:\git-play\git-test-wt1- 关键弹窗:选 New Window(新窗口)
- 现在你有两个 IDEA 窗口了:
- 窗口A(主):
git-test,分支main - 窗口B(副):
git-test-wt1,分支feat-wt1
- 窗口A(主):
🧪 第四步:验证隔离性(最好玩的部分)
在窗口B(副窗口)里:
echo "Hello from worktree" > wt-test.txt
git add .
git commit -m "feat: add wt-test.txt in worktree"
在窗口A(主窗口)里:
- 看文件列表 → 没有
wt-test.txt(物理隔离 ✅) - 敲
git log --all --oneline→ 能看到 feat-wt1 的提交(共享历史 ✅)
🧹 第五步:清理 Worktree
练完了,在窗口A的 Terminal 里清理:
# 删除 worktree
git worktree remove ../git-test-wt1
# 删除分支(可选)
git branch -d feat-wt1
# 确认清理干净
git worktree list
⚡ 快速验证清单
| 检查项 | 预期结果 |
|---|---|
git worktree list |
显示两个目录 |
| 窗口B改文件,窗口A看不到 | ✅ 物理隔离 |
窗口A git log --all 能看到窗口B的提交 |
✅ 共享.git |
git worktree remove 后目录消失 |
✅ 清理成功 |
去敲吧,5分钟搞定。遇到报错直接贴给我!
2. 2026-07-26T07:29:05.185
用户
咋没练习咋把 feat-wt1 分支合并过来
AI
好问题!Worktree 开发完,合并回主分支是标准流程。给你3步合并法:
🔄 第一步:在主窗口合并
回到窗口A(主窗口,main分支),在 Terminal 里敲:
# 确保在 main 分支
git checkout main
# 合并 feat-wt1 的改动
git merge feat-wt1
如果没冲突,直接成功,你会看到 wt-test.txt 出现在主窗口了。
⚔️ 第二步:处理冲突(如果有)
如果两边都改了同一个文件,会报冲突:
# 1. IDEA 会高亮冲突文件,打开它
# 2. 你会看到这种标记:
<<<<<<< HEAD
main 的内容
=======
worktree 的内容
>>>>>>> feat-wt1
# 3. 手动选择保留哪个,删掉标记
# 4. 保存后执行:
git add .
git commit -m "merge: feat-wt1 into main"
🧹 第三步:清理 Worktree
合并完,worktree 就没用了,清理掉:
# 删除 worktree 目录
git worktree remove ../git-test-wt1
# 删除分支(可选,如果以后不用了)
git branch -d feat-wt1
# 确认清理干净
git worktree list
📊 完整流程图
窗口A (main) 窗口B (feat-wt1)
| |
| | 开发:改文件、提交
| |
| ← git merge feat-wt1 |
| |
| 合并完成 |
| |
| git worktree remove |
| git branch -d |
↓ ↓
清理完毕,只剩 main
⚡ 快速验证
合并后,在主窗口敲:
git log --oneline
应该能看到 feat-wt1 的提交记录,说明合并成功。
去试试吧!合并完记得清理 worktree,不然目录会一直占着磁盘。
3. 2026-07-26T07:32:52.478
用户
git worktree 和新建分支有什么区别
AI
一句话总结:新建分支是"同一个房间换家具",Worktree 是"开两个房间同时装修"。
底层数据它们完全一样(都共享同一个 .git 仓库),区别全在物理表现上:
| 维度 | 普通新建分支 (git checkout -b) |
Git Worktree (git worktree add) |
|---|---|---|
| 物理目录 | 只有 1 个目录 | N 个目录(每个目录对应一个分支) |
| 并行工作 | ❌ 不行。切分支时文件会被替换,IDEA 要重新索引 | ✅ 可以。开两个 IDEA 窗口,互不干扰 |
| 切换成本 | 高。切分支要等 IDEA 重新加载、Maven 重新解析 | 零。直接切到另一个窗口就行 |
| 未提交的改动 | 切分支前必须 git stash 或 commit,否则容易冲突 |
不需要。每个目录的改动是物理隔离的 |
🎯 结合你的"两阶段 SOP"来看
- 如果用普通分支:你在主目录让 AI 跑"暴力对齐",AI 把代码改得乱七八糟。这时候你想切回
main看看原来的干净代码,一checkout,IDEA 疯狂重建索引,而且 AI 没提交的脏文件还会跟着你切过去,搞得心烦。 - 如果用 Worktree:主窗口(main)干干净净,你用来做"阶段二:人工验收"。副窗口(worktree)扔给 AI 跑"阶段一:暴力对齐",AI 改崩了直接删目录,主窗口连抖都不抖一下。
💡 什么时候用哪个?
- 普通分支:适合串行开发(做完 A 再做 B,或者一个人单干)。
- Worktree:适合并行场景(一边看 A 一边改 B、Code Review 对比、或者让 AI 在后台跑暴力对齐)。
Worktree 就是为了解决"切分支太烦"而发明的物理外挂。
【我】Treehouse( git worktree封装) 联网了解下
✨ 核心优势:更适合 AI 开发
| 特性 | 原生 Git Worktree | Treehouse |
|---|---|---|
| Agent 锁 | ❌ 无 | ✅ 内置锁机制,防止多个 Agent 同时操作同一分支 |
| 配置管理 | ❌ 手动 | ✅ 通过 treehouse.json 统一管理工作树位置、目标分支等 |
| 状态追踪 | ❌ 仅 Git 信息 | ✅ 元数据记录 Agent ID、锁状态、过期时间等 |
| 工作流 | ❌ 手动命令组合 | ✅ init → create → lock → complete 标准化流程 |
| 自动清理 | ❌ 需手动 prune | ✅ 锁过期自动释放,complete 命令自动合并清理 |
🛠️ 核心工作流
Treehouse 定义了一套完整的生命周期命令,完美适配 AI Agent 的任务模式:
treehouse init:在项目根目录创建treehouse.json配置文件,定义工作树目录、默认合并目标分支、锁超时时间等。treehouse create <name>:创建新的工作树,并自动执行setup-worktree中定义的初始化命令(如npm install)。treehouse lock:为工作树添加 Agent 锁,记录 Agent ID 和锁消息,防止其他会话误操作。treehouse list:查看所有工作树的状态,包括锁状态、过期时间、是否可清理等。treehouse complete:任务完成后,自动将工作树合并到目标分支并清理。treehouse remove:手动清理工作树。
⚠️ 使用注意事项
- 前置要求:需要 Node.js 18+ 和 Git 2.5+,且必须在 Git 仓库中运行。
- 锁机制:锁有超时时间(默认60分钟),超时后自动释放,避免 Agent 异常退出后工作树被永久锁定。
- 元数据文件:
.git/treehouse-metadata.json是 Treehouse 的核心,不要手动修改或删除它。 - 与 Claude Code 配合:在
treehouse create后,进入工作树目录启动 Claude 会话即可,Treehouse 会自动处理 Git 层面的隔离和状态管理。
💡 与之前方案的对比
你之前了解的“Git Worktree + 终端”方案是手动、灵活的,适合个人探索;而 Treehouse 是自动化、规范化的,更适合团队协作和 AI Agent 的规模化使用。如果你需要让多个 Claude Code 会话在团队中安全协作,Treehouse 是更专业的选择。
浙公网安备 33010602011771号