Git Worktree 应该这样用
为什么需要 Git Worktree?
在日常开发中,我们经常遇到这样的场景:
- 正在开发一个新功能,突然需要修复线上紧急 bug
- 同时需要维护多个版本分支(如 v1.0、v2.0)
- 需要对比两个分支的代码差异
传统做法是:
- 使用
git stash暂存当前工作 - 或者创建多个工作目录副本
但这些方法都有问题:
git stash容易混乱,且只能暂存一套- 多个副本占用空间,且不同步
Git Worktree 完美解决了这些问题!
什么是 Git Worktree?
Git Worktree 允许你在同一个仓库中,同时检出多个分支到不同的工作目录。
1 | my-project/ |
基本用法
创建新的 Worktree
1 | # 基于现有分支创建 worktree |
查看 Worktree 列表
1 | git worktree list |
输出示例:
1 | /Users/dev/project abc1234 [main] |
删除 Worktree
1 | # 删除指定 worktree |
实战场景
场景一:紧急 Bug 修复
1 | # 1. 当前正在开发功能 |
场景二:同时维护多个版本
1 | # 主目录:开发版本 |
场景三:代码审查
1 | # 审查同事的 PR |
高级技巧
1. 自动清理
1 | # 添加自动清理配置 |
2. Worktree 与 Git Hook
在每个 worktree 中,Git hooks 都会独立工作:
1 | # 在主仓库设置 hooks |
3. 不同 Worktree 使用不同配置
1 | # 在每个 worktree 中使用不同的 .git/config |
常见问题
Q1: Worktree 可以推送吗?
A: 可以!每个 worktree 都可以独立推送:
1 | cd ../feature-branch |
Q2: 如何在不同 worktree 之间共享配置?
A: 使用全局 Git 配置或符号链接:
1 | # 共享 .gitignore |
Q3: Worktree 会占用更多空间吗?
A: 不会!Worktree 共享同一个 .git 目录,只包含工作文件,不会复制 Git 对象。
最佳实践
命名规范
1
2
3# 使用描述性的目录名
git worktree add ../feature-user-auth feature/user-auth
git worktree add ../hotfix-login-bug hotfix/login-bug定期清理
1
2# 每周清理未使用的 worktree
git worktree prune使用完及时删除
1
2# 任务完成后删除 worktree
git worktree remove ../temporary-branch配合 IDE 使用
- VS Code:每个 worktree 作为独立项目打开
- IntelliJ:使用 “Open as Project”
总结
Git Worktree 是一个强大的工具,可以:
- ✅ 同时处理多个分支
- ✅ 避免频繁切换分支
- ✅ 隔离不同任务的工作环境
- ✅ 不占用额外存储空间
如果你的工作涉及多分支并行开发,Git Worktree 绝对值得一试!
参考资源
尝试在你的下一个项目中使用 Git Worktree,你会发现开发效率大大提升!
如果你有更多 Git Worktree 使用技巧,欢迎分享!