第 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
# 基于 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
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
# 先删除 worktree 记录
git worktree remove ../project-hotfix
# 如果目录还有未提交的改动,需要强制删除
git worktree remove --force ../project-hotfix
# 然后手动删除文件夹(可选)
rm -rf ../project-hotfix2.4 清理已不存在的 Worktree 记录
如果手动删掉了文件夹但 Git 记录还在:
git worktree prune三、实战场景
场景 1:紧急 Bug 修复
最经典的使用场景。你正在 feature/redesign 分支上开发新首页,产品改了一半,代码乱糟糟的不想提交。
# 不中断当前工作,直接开一个 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 个需求,你想在本地同时跑三个版本做对比测试:
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,你想拉下来本地跑一下看看效果,但又不想切走当前分支:
# 基于 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 冲突了」 | 两个分支改了同一个文件 | 需要确认以哪个版本为准 |
五、注意事项
不能两个 Worktree 同时 checkout 同一个分支——Git 会阻止你。每个 worktree 必须是不同的分支
Worktree 共享同一个
.git目录——这意味着 fetch/push 对所有 worktree 生效,不需要在每个目录里重复拉取用完记得清理——Worktree 会占用磁盘空间(每个目录都是完整的代码副本)。不用的 worktree 及时
remove+ 删文件夹默认分支不能是 detached HEAD——创建 worktree 时 Git 会检查主 worktree 的状态
本课实践
- 在你的项目里创建一个 worktree,体验「不中断当前工作 + 开新分支」的流程
- 用
git worktree list查看当前所有 worktree - 删除刚才创建的 worktree,清理干净
下一步
掌握了 Git 的版本管理和并行开发方式之后,下一课我们学习如何使用 Claude Code——一个在终端中与 AI 协作的强大工具。