一句话:让你在同一个 Git 仓库上,同时拥有多个工作目录,每个目录可以 checkout 不同的分支。
平时你只有一个工作目录:
my-project/ <- 只能同时在一个分支上
想同时开发两个功能?只能:
git checkout(打断当前工作、要 stash)my-project/ <- main 分支 my-project-feat-a/ <- feature-a 分支 my-project-feat-b/ <- feature-b 分支
三个目录共享同一个 .git 仓库(对象库、历史、分支都是同一份),但各自有独立的工作区和索引。互不干扰,可同时打开、同时编译、同时跑 AI Agent。
.git 对象库 → 几乎不占额外空间(只多一份工作区文件)好消息:worktree 是 Git 内置功能,无需安装。
只要你的 Git 版本 ≥ 2.5(2015 年发布,现在几乎都是),就已经有了。
检查版本:
bashgit --version
# git version 2.39.0 <- 没问题
如果版本太老(不太可能),升级:
bash# macOS
brew install git
# Ubuntu/Debian
sudo apt update && sudo apt install git
# Windows
# 下载 Git for Windows 最新版即可
只有几个命令,记住就够用了:
| 命令 | 作用 |
|---|---|
git worktree add <路径> <分支> | 新建 worktree |
git worktree list | 列出所有 worktree |
git worktree remove <路径> | 删除 worktree |
git worktree prune | 清理失效的 worktree 记录 |
git worktree move <旧> <新> | 移动 worktree |
假设你有个项目在 ~/code/my-project,当前在 main 分支。
bashcd ~/code/my-project
# 在 ../my-project-feat-a 目录,checkout 已有的 feature-a 分支
git worktree add ../my-project-feat-a feature-a
bash# 基于当前 HEAD 创建新分支 feature-b,并放到新目录
git worktree add ../my-project-feat-b -b feature-b
# 基于 main 创建(推荐,避免基于脏分支)
git worktree add ../my-project-feat-b -b feature-b main
bashgit worktree list
输出示例:
/home/you/code/my-project abc1234 [main] /home/you/code/my-project-feat-a def5678 [feature-a] /home/you/code/my-project-feat-b 9ab0123 [feature-b]
bashcd ../my-project-feat-b
# 这里就是普通的 git 仓库,随便改、随便提交
git status
git add .
git commit -m "feat: xxx"
git push -u origin feature-b
bash# 先确保没有未提交的改动,然后:
git worktree remove ../my-project-feat-b
# 如果里面有改动想强制删:
git worktree remove --force ../my-project-feat-b
分支本身不会被删,只是移除工作目录。
这是你最关心的场景:
bashcd ~/code/my-project
# 给每个 AI 任务开一个独立 worktree + 分支
git worktree add ../proj-ai-task-1 -b ai/task-1 main
git worktree add ../proj-ai-task-2 -b ai/task-2 main
git worktree add ../proj-ai-task-3 -b ai/task-3 main
git worktree list
然后:
终端1: cd ../proj-ai-task-1 -> 跑 AI Agent #1 终端2: cd ../proj-ai-task-2 -> 跑 AI Agent #2 终端3: cd ../proj-ai-task-3 -> 跑 AI Agent #3
每个 Agent 在自己的目录、自己的分支里干活,物理上不可能踩到别人。
完成后:
bash# 各自 push
cd ../proj-ai-task-1 && git push -u origin ai/task-1
cd ../proj-ai-task-2 && git push -u origin ai/task-2
# 回到主目录,走 PR / merge 流程
cd ~/code/my-project
git fetch
# 逐个 review 合并,处理可能的 merge 冲突
关键约定:
main 最新拉出,减少后续冲突bashgit worktree add ../dup feature-a
# fatal: 'feature-a' is already checked out at '.../my-project-feat-a'
这是 Git 的保护机制。要并行,就每个 worktree 用不同分支。
不要直接 rm -rf 删 worktree 目录,会留下脏记录。用:
bashgit worktree remove <路径>
如果已经手贱删了,清理:
bashgit worktree prune
../xxx)比较整洁-wt- 前缀,方便识别bashgit worktree list # 看有哪些
git worktree remove xxx # 删掉不用的
如果 worktree 目录不小心放在了仓库内,加到 .gitignore:
*-wt-*/
Worktree = 一个仓库,多个工作目录,各自独立分支,共享历史。 是并行开发(尤其多 AI Agent)最干净、最可靠的隔离方案,Git 原生、零成本。
https://github.com/jackiotyu/git-worktree-manager/blob/HEAD/README.zh-CN.md
本文作者:Weee
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!