Git Worktree:单仓库多分支并行开发实战
git worktree 是 Git 提供的一个强大功能,允许你在同一个 Git 仓库中同时检出多个分支,而无需克隆多个副本。每个工作树(worktree)都有独立的工作目录、暂存区和 HEAD,但共享同一个 .git 仓库对象数据库,从而节省磁盘空间并提升效率。
官方文档参考:https://git-scm.com/docs/git-worktree
基本概念
在使用之前,先理清两个核心概念:
- 主工作树(main worktree):即你正常 clone 或 init 的那个目录,通常是当前工作的根目录。
- 链接工作树(linked worktree):通过
git worktree add创建的额外工作目录,指向同一仓库的不同分支(或提交)。它们就像主仓库的'分身',数据互通但工作环境隔离。
常用命令
| 命令 | 说明 |
|---|---|
git worktree add <path> <branch> | 在 <path> 创建一个新工作树,检出 <branch> |
git worktree list | 列出当前仓库所有工作树及其状态 |
git worktree remove <path> | 删除指定路径的工作树(需先清理干净) |
git worktree prune | 清理已失效(如被手动删除)的工作树记录 |
使用示例
1. 创建一个新的 worktree
假设你在主分支 main 上工作,但需要同时在 feature/login 分支上开发新功能,这时候直接切分支会覆盖当前的修改。不如这样操作:
# 在当前仓库目录下执行
mkdir -p ../myproject-login && cd ../myproject-login
git worktree add ../myproject-login feature/login
这会在 ../myproject-login 创建一个新目录,自动检出 feature/login 分支。你可以同时在两个目录中独立工作:
myproject/:处于main分支myproject-login/:处于feature/login分支
两者共享同一个 Git 仓库数据(对象、refs 等),但工作文件互不影响。切换时只需 cd 到对应目录即可。
2. 查看所有 worktree
想知道当前仓库挂载了多少个工作树?运行以下命令:
git worktree list
输出示例:
/path/to/myproject abcd123 [main] /path/to/myproject-login ef45678 [feature/login]
可以看到每个工作树对应的路径、Commit ID 以及当前所在的分支。

