Appearance
工作树(Worktree)
git worktree 允许你同时在多个分支上工作,每个分支有独立的工作目录,共享同一个 .git 仓库。
git worktree add 创建工作树
bash
# 在新目录创建工作树,检出指定分支
git worktree add ../hotfix hotfix/urgent-bug
# 创建工作树并同时创建新分支
git worktree add -b feature/new-feature ../feature-work main
# 基于某个提交创建(分离 HEAD 状态)
git worktree add ../review abc123同时在多个分支上工作
工作树解决了"需要切换分支时,当前工作区有未提交改动"的问题:
bash
# 场景:正在 feature 分支上开发,需要紧急修复 bug
# 传统方式:stash → switch → 修复 → push → unstash(繁琐)
# 使用 worktree:
# 为 hotfix 创建独立工作目录
git worktree add ../hotfix-work hotfix/urgent-bug
# 在新终端或文件管理器打开 ../hotfix-work,不影响当前工作
cd ../hotfix-work
# 修复 bug,提交,推送
git commit -m "fix: 紧急修复"
git push
# 回到原来的工作目录继续开发
cd ../my-project
# 工作区状态完全保留!git worktree list / remove
bash
# 查看所有工作树
git worktree list
# /home/user/my-project abc123 [main]
# /home/user/hotfix-work def456 [hotfix/urgent-bug]
# /home/user/feature-work ghi789 [feature/new-feature]
# 详细信息
git worktree list --porcelain
# 删除工作树
git worktree remove ../hotfix-work
# 强制删除(有未提交改动时)
git worktree remove --force ../hotfix-work
# 清理已删除目录的引用
git worktree prune使用场景:紧急修复时不想 stash
这是 worktree 最典型的使用场景:
bash
# 正在进行复杂的功能开发,工作区有大量未提交改动
git status
# On branch feature/complex-refactoring
# Changes not staged for commit: (大量文件)
# 收到紧急修复请求,不想 stash(可能有冲突)
# 创建独立的 hotfix 工作树
git worktree add ../urgent-fix -b hotfix/login-crash main
# 在新目录修复(完全独立,不影响 feature 工作区)
cd ../urgent-fix
# 修复...
git commit -m "fix: 修复登录崩溃问题"
git push
# 修复完成,删除 hotfix 工作树
git worktree remove ../urgent-fix
# 回到原来的工作,毫无影响
cd ../my-project
git status # 工作区状态完整保留注意事项
- 同一个分支只能在一个工作树中检出,不能在两个工作树同时检出同一分支
- 工作树之间共享
.git目录(对象存储、引用等) - 每个工作树有独立的暂存区(INDEX)
- 适合短期并行工作,不建议长期维护大量工作树
总结
| 操作 | 命令 |
|---|---|
| 创建工作树 | git worktree add <path> <branch> |
| 创建并切换新分支 | git worktree add -b <branch> <path> |
| 查看所有工作树 | git worktree list |
| 删除工作树 | git worktree remove <path> |
| 清理引用 | git worktree prune |
Worktree 是处理并行开发任务的优雅方案,特别适合"不想 stash,又不想放弃当前工作"的场景。