git worktree 是 Git 提供的一个强大功能,允许你在同一个 Git 仓库中同时检出多个分支,而无需克隆多个副本。每个工作树(worktree)都有独立的工作目录、暂存区和 HEAD,但共享同一个 .git 仓库对象数据库,从而节省磁盘空间和提升效率。
一、基本概念
- 主工作树(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 分支上开发:
# 在当前仓库目录下执行 git worktree add ../myproject-login feature/login
这会在 ../myproject-login 创建一个新目录,自动检出 feature/login 分支。
你可以同时在两个目录中独立工作:
myproject/:处于main分支myproject-login/:处于feature/login分支
两者共享同一个 Git 仓库数据(对象、refs 等),但工作文件互不影响。
2. 查看所有 worktree
git worktree list
输出示例:
/path/to/myproject abcd123 [main] /path/to/myproject-login ef45678 [feature/login]
3. 删除 worktree
确保目标目录已 clean(无未提交更改),然后:
git worktree remove ../myproject-login
或手动删除目录后运行:
git worktree prune

