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

  1. FileOpen → 选择 D:\git-play\git-test-wt1
  2. 关键弹窗:选 New Window(新窗口)
  3. 现在你有两个 IDEA 窗口了:
    • 窗口A(主):git-test,分支 main
    • 窗口B(副):git-test-wt1,分支 feat-wt1

🧪 第四步:验证隔离性(最好玩的部分)

在窗口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、锁状态、过期时间等
工作流 ❌ 手动命令组合 initcreatelockcomplete 标准化流程
自动清理 ❌ 需手动 prune ✅ 锁过期自动释放,complete 命令自动合并清理

🛠️ 核心工作流

Treehouse 定义了一套完整的生命周期命令,完美适配 AI Agent 的任务模式:

  1. treehouse init:在项目根目录创建 treehouse.json 配置文件,定义工作树目录、默认合并目标分支、锁超时时间等。
  2. treehouse create <name>:创建新的工作树,并自动执行 setup-worktree 中定义的初始化命令(如 npm install)。
  3. treehouse lock:为工作树添加 Agent 锁,记录 Agent ID 和锁消息,防止其他会话误操作。
  4. treehouse list:查看所有工作树的状态,包括锁状态、过期时间、是否可清理等。
  5. treehouse complete:任务完成后,自动将工作树合并到目标分支并清理。
  6. 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 是更专业的选择。

posted on 2026-07-26 07:37  anjun_xf  阅读(19)  评论(0)    收藏  举报

导航

TOP