Skip to content

第 13 课:Git Worktree 并行开发实战 ​

第三章:产品开发协作 | 第 13 课

课前思考 ​

你有没有遇到过这种情况:正在做一个新功能的 PRD,突然线上出了紧急 Bug 需要立刻处理。你手头的工作还没做完,没法提交,切分支又会丢失未保存的上下文。

或者你的产品同时有 3 个需求在并行推进,你想在本地同时看到三个不同的代码版本,而不是来回切换分支。

Git Worktree 就是为这个场景设计的。它让你一个仓库同时签出多个分支到不同目录,互不干扰。PM 不需要自己操作,但理解它能帮你更好地与开发协作,也让你理解 Codex 桌面版的「工作树」功能。


一、什么是 Git Worktree ​

1.1 一句话解释 ​

Git Worktree 允许你在同一个仓库中,把不同的分支同时签出到不同的文件夹。每个文件夹独立工作,互不干扰。

1.2 为什么需要它 ​

没有 Worktree 时,你只有一个工作目录:

开发新功能 A 中...  →  紧急!线上 Bug  →  怎么办?
                        ├─ 提交一半的代码?(污染提交历史)
                        ├─ git stash?(可能丢失上下文)
                        └─ 复制一份仓库?(浪费磁盘,且不同步)

有 Worktree 之后:

~/project/
├── main/          ← worktree 1:主分支,修 Bug
├── feature-a/     ← worktree 2:开发新功能 A
└── feature-b/     ← worktree 3:开发新功能 B

三个目录,同一个 .git 仓库,分支互不干扰。


二、基本操作 ​

2.1 创建 Worktree ​

bash
# 基于 main 分支创建一个新的 worktree,用于紧急 Bug 修复
git worktree add ../project-hotfix hotfix/login-crash

# 基于 main 创建一个新分支,同时切换到新 worktree
git worktree add -b feature/payment ../project-payment main

执行后,../project-hotfix 目录就出现了,里面是 hotfix/login-crash 分支的代码,可以直接开始工作。

2.2 查看所有 Worktree ​

bash
git worktree list

# 输出示例:
# /Users/pm/project           abc1234 [main]
# /Users/pm/project-hotfix    def5678 [hotfix/login-crash]
# /Users/pm/project-payment   ghi9012 [feature/payment]

第一列是路径,第二列是 commit,第三列是分支名。当前你在哪个目录,哪个前面就有 * 标记。

2.3 删除 Worktree ​

bash
# 先删除 worktree 记录
git worktree remove ../project-hotfix

# 如果目录还有未提交的改动,需要强制删除
git worktree remove --force ../project-hotfix

# 然后手动删除文件夹(可选)
rm -rf ../project-hotfix

2.4 清理已不存在的 Worktree 记录 ​

如果手动删掉了文件夹但 Git 记录还在:

bash
git worktree prune

三、实战场景 ​

场景 1:紧急 Bug 修复 ​

最经典的使用场景。你正在 feature/redesign 分支上开发新首页,产品改了一半,代码乱糟糟的不想提交。

bash
# 不中断当前工作,直接开一个 worktree 修 Bug
git worktree add -b hotfix/crash ../project-hotfix main

# 在新目录里修 Bug → 测试 → 提交 → 推送
cd ../project-hotfix
# ... 修 Bug ...
git add . && git commit -m "fix: login crash"
git push origin hotfix/crash

# 切回原来的工作目录,继续开发新首页
cd ~/project

整个过程你的新首页开发完全没被打断——不需要 stash、不需要临时提交。

场景 2:并行开发多个功能 ​

团队同时推进 3 个需求,你想在本地同时跑三个版本做对比测试:

bash
git worktree add ../project-feat-a feature/ai-search
git worktree add ../project-feat-b feature/payment
git worktree add ../project-feat-c feature/onboarding

# 开三个终端窗口,分别进入三个目录
# 可以同时编译、测试、对比

场景 3:Code Review 时快速切换 ​

开发提了 PR,你想拉下来本地跑一下看看效果,但又不想切走当前分支:

bash
# 基于 PR 分支创建一个临时 worktree
git fetch origin pull/42/head:pr-42
git worktree add ../project-review pr-42

# 在 review 目录里编译运行,看完就删
cd ../project-review
# ... 运行、测试、查看代码 ...
cd ~/project
git worktree remove ../project-review

四、PM 需要知道什么 ​

作为产品经理,你一般不需要自己执行这些命令。但理解 Worktree 让你在以下场景中更专业:

4.1 理解开发的工作方式 ​

当你问开发「Bug 修到哪了」,他说「我开了个 worktree 在修,不影响主线」——你听得懂他在说什么。

4.2 理解 Codex 桌面版的「工作树」 ​

第 13 课会讲到 Codex 桌面版的 Worktree 功能——每个 AI Agent 在隔离的 Git 副本中工作,互不干扰,只有你确认后才会合并到主分支。

Codex 的工作树就是 Git Worktree 的自动化版本:

传统方式              Codex 方式
PM 手动 git add     →  Codex 自动创建 worktree
开发在不同目录工作    →  AI Agent 在隔离副本中工作
手动合并到 main      →  确认后一键合并

4.3 避免常见的协作误会 ​

开发说实际意思PM 理解
「我在另一个 worktree 上」我开了个独立目录在并行工作他的开发环境同时跑着多个分支
「我 prune 一下 worktree」清理已经不用的本地分支目录他在做本地环境清理
「这个 worktree 冲突了」两个分支改了同一个文件需要确认以哪个版本为准

五、注意事项 ​

  1. 不能两个 Worktree 同时 checkout 同一个分支——Git 会阻止你。每个 worktree 必须是不同的分支

  2. Worktree 共享同一个 .git 目录——这意味着 fetch/push 对所有 worktree 生效,不需要在每个目录里重复拉取

  3. 用完记得清理——Worktree 会占用磁盘空间(每个目录都是完整的代码副本)。不用的 worktree 及时 remove + 删文件夹

  4. 默认分支不能是 detached HEAD——创建 worktree 时 Git 会检查主 worktree 的状态


本课实践 ​

  1. 在你的项目里创建一个 worktree,体验「不中断当前工作 + 开新分支」的流程
  2. 用 git worktree list 查看当前所有 worktree
  3. 删除刚才创建的 worktree,清理干净

下一步 ​

掌握了 Git 的版本管理和并行开发方式之后,下一课我们学习如何使用 Claude Code——一个在终端中与 AI 协作的强大工具。

课程讨论

有问题或想法?欢迎在下方留言讨论。

基于 AI 时代产品实践整理