典型场景:一个 Java 单体或多模块项目,需要同时维护 testpreprod 多套环境分支,还要临时开很多 feature 分支。
传统做法要么频繁 git checkout 切分支,要么干脆 clone 三四份仓库,既容易误操作,又浪费磁盘。
本文介绍一种更现代化的组合:Git worktree + Vibe Code Git 客户端 + IntelliJ IDEA,在同一个仓库上优雅地做多分支并行开发。


0. 传统单工作区的痛点

show.jpg 日常开发中,我们经常同时维护:

  • develop / master / release-*
  • 环境分支:testpreprod
  • 多个特性分支:feature/xxx-1feature/xxx-2……

如果只用一个本地目录 + git checkout,会遇到很多问题:

  • 频繁切分支
    • 忘了 stash / commit,本地改动被带到了另一个分支;
    • 正在 debug test 分支,产品同事让你马上修一个 pre 的 bug,又得切回去。
  • 多 clone 占磁盘
    • 为了并行开发,只能 git clone 多份,.git 目录重复占空间;
    • 同一个仓库更新要 git pull N 次。
  • IDE 配置混乱
    • 同一目录下的 .idearun configuration 容易互相覆盖,尤其 Java 多模块项目时更烦。

这些问题,本质都来自一个事实:工作目录和分支是强绑定关系,一次只能服务一个分支。


1. Git Worktree:一个仓库,多套工作目录

Git 官方早就给了更优解:git worktree

简单理解:
你只有一个真正的仓库(只有一份 .git),但可以为不同分支创建多个工作目录,每个目录看起来就像一个独立 clone,好处是:

  • .git 共享 → 节省磁盘
  • fetch 一次 → 所有工作区都能用
  • 各工作区的代码、IDE 配置互不影响

假设我们已经在 ~/Project/aim_main 下有主仓库:

cd ~/Project
git clone [email protected]:team/aim.git aim_main
cd aim_main

现在我们希望:

  • ~/Project/aim_test → 对应 test 分支
  • ~/Project/aim_pre → 对应 pre 分支
  • 以后还要有一些临时 feature 工作树

1.1 为 test 分支创建一个 worktree

cd ~/Project/aim_main

# 确保本地有 test 分支
git fetch origin
git branch test origin/test

# 为 test 创建独立工作目录
git worktree add ../aim_test test

目录结构大致变成:

~/Project/
  ├── aim_main   # 主仓库,默认分支比如 develop
  ├── aim_test   # worktree,绑定 test 分支
  └── ...

aim_test 目录看起来就像一个普通项目目录,可以单独用 Vibe Code / IDEA 打开。

1.2 为 pre 分支再来一个

cd ~/Project/aim_main

git branch pre origin/pre
git worktree add ../aim_pre pre

现在:

~/Project/
  ├── aim_main   # develop
  ├── aim_test   # test
  └── aim_pre    # pre

每个目录的代码互不影响,你可以在 aim_test 里放心改动、提交、跑测试,同时 aim_pre 也可以挂着一个不同版本在跑。


2. 搭配 Vibe Code:直观管理多工作树和分支

Vibe Code 这类 Git 客户端,对多仓库 / 多目录的支持通常都很好。结合 worktree,使用方式大致是:

  • aim_test 当成一个独立项目打开;
  • 再把 aim_pre 作为另一个项目打开;
  • 顶部 project 切换,可快速在多个环境之间切换视图。

这种用法的好处:

  1. 一眼看出自己正在操作哪个环境

    • 标题栏 / tab 上直接看到 aim_test [test]aim_pre [pre] 这种视觉信息;
    • 减少 “在 pre 分支误改了 test 配置” 的概率。
  2. Commit / Merge Request 视图更聚焦

    • 每个 worktree 的提交历史就是单一分支的历史;
    • 在 Vibe Code 中直接从该目录发起 MR,减少误选分支、误选 target 的风险。
  3. 结构视图清晰

    • 像 screenshot 中那样,一个项目窗格只对应一个目标分支;
    • 多模块 Java 项目也能用树状结构快速定位模块。

换句话说,worktree 把“逻辑分支”的概念,在工具层面具体成了“不同的物理目录”,而 Vibe Code 则负责给这些目录提供更可视化的 Git 操作入口。


3. 搭配 IntelliJ IDEA:Java 项目多环境并行调试

对 Java 项目来说,IDEA 是生产力核心。把 worktree + IDEA 结合起来,有几个非常现实的优势。

3.1 每个分支一个 IDEA Project

比如:

  • 用 IDEA 打开 ~/Project/aim_test → 配置 test 环境的 Run/Debug 配置;
  • 再打开 ~/Project/aim_pre → 配置 pre 环境的 Run/Debug 配置。

这样:

  • test、pre 两个环境可以同时起服务,甚至绑定不同端口 / 不同 profile:

    • aim_test--spring.profiles.active=test
    • aim_pre--spring.profiles.active=pre
  • 各自 .idea 目录独立,Run Configuration 不会互相覆盖;

  • 不同分支的依赖变更(比如升级 Spring Boot 版本)也不会影响另一边的索引与缓存。

3.2 多模块 / 微服务场景的体验

在一个多模块 / 微服务的 Java 仓库中(类似 screenshot 里的 aim-gatewayaim-modelaim-service-*):

  • 你可以在 aim_test 中专门配置与测试环境联调相关的模块;
  • aim_pre 中则配置预发场景使用的网关和核心服务;
  • IDEA 的 Maven / Gradle 工具窗口都是基于当前目录的 pom.xml / build.gradle,不会混在一起。

配合 IDEA 的 多窗口 功能,你甚至可以:

  • 左边窗口是 aim_test 的代码和日志;
  • 右边窗口是 aim_pre 的代码和日志;
  • 中间再放一个 Vibe Code 窗口看 MR 状态。

这比单目录反复切分支、重新导入项目不知道高到哪里去了。


4. 使用 worktree 的几个常用命令

4.1 创建 feature 分支工作树

develop 拉一条特性分支,并给它单独一个目录:

cd ~/Project/aim_main

git fetch origin
git worktree add ../aim_feature_x origin/develop -b feature/user-xxx

完成开发和合并 MR 后,可以删掉这个工作树:

# 删除工作树目录(不会删分支本身)
git worktree remove ../aim_feature_x

# 若分支已合并,可顺带删分支
git branch -d feature/user-xxx

4.2 查看当前所有 worktree

cd ~/Project/aim_main
git worktree list

输出类似:

/Users/you/Project/aim_main  abcdef1 [develop]
/Users/you/Project/aim_test  1234567 [test]
/Users/you/Project/aim_pre   89abcde [pre]

很方便整体掌握当前本地有哪些“环境”。


5. 与“多次 git clone”的对比

很多同学会问:

“我之前就是 clone 三份目录,test / pre / prod 各一个,这跟 worktree 有什么本质区别?”

简单对比一下:

方案 .git 是否多份 空间占用 fetch 更新 配置共享 清理成本
多次 git clone 多份 每个目录都要拉 remote、hook 各自一套 要自己记得删
git worktree 只有主仓库一份 小(只多工作区文件) 主仓库拉一次,全局可用 统一 remote/hook/alias git worktree remove 一条命令

从长期维护角度看:

  • 磁盘:worktree 只多工作区里的源码和编译产物,.git 只一份;
  • 一致性:remote、hook、Git config 都是主仓库那一套,避免环境不一致;
  • 操作心智:所有分支都“属于同一个仓库”,只是挂在不同工作树上。

6. 小结

使用 Git worktree + Vibe Code + IntelliJ IDEA 做多分支并行开发,大致可以归纳为几个关键优势:

  1. 目录级别区分环境:test / pre / feature 分支各有独立工作目录,误操作概率极低。
  2. 磁盘与网络友好:只保留一份 .git,fetch 一次,全局生效。
  3. IDE 体验更好:每个分支一个 IDEA Project;多环境可同时起服务、分别调试。
  4. Git 可视化管理自然贴合:Vibe Code 中,一个窗口对应一个 worktree,commit / MR 视图清爽明了。
  5. 扩展性强:随时为某个紧急 hotfix 或 feature 新增一个临时工作树,用完即删。

如果你现在还习惯在一个目录里疯狂 git checkout 切分支,或者 clone 了三四份同一个仓库,不妨尝试一下这种组合。 通常只需要一两个迭代,你就会再也不想回到过去那种“切分支式开发”了。