git: worktree命令介绍和使用
文章目录
git worktree 是 Git 提供的一个强大功能,允许你在同一个 Git 仓库中同时检出多个分支,而无需克隆多个副本。每个工作树(worktree)都有独立的工作目录、暂存区和 HEAD,但共享同一个 .git 仓库对象数据库,从而节省磁盘空间和提升效率。
https://git-scm.com/docs/git-worktree/zh_HANS-CN
一、基本概念
- 主工作树(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 四、注意事项
- 不能在同一分支上创建多个 worktree(Git 会报错)。
- 不能删除当前正在使用的工作树。
git worktree add如果指定的分支不存在,会自动基于当前 HEAD 新建。- 所有 worktree 共享配置(如
git config),但可以单独设置局部配置(在各自目录下使用git config会写入共享.git/config,建议谨慎)。
五、典型使用场景
- 并行处理多个分支:比如同时修复 bug(hotfix)和开发新功能(feature)。
- CI/CD 脚本中快速切换分支构建,避免重复 clone。
- 文档构建:主分支写代码,gh-pages 分支生成文档,用 worktree 同时维护。
六、兼容性
git worktree自 Git 2.5(2015 年)起引入。- 推荐使用 Git 2.15+ 以获得更稳定的体验。