Git worktree — 停止暂存,开始并行工作
Source: Dev.to
请提供您希望翻译的文章正文内容,我将按照要求将其译成简体中文并保留原有的格式、Markdown 语法以及技术术语。谢谢!
介绍:分支切换的痛苦 😤
如果你使用 Git 已经有一段时间了,你一定经历过这种情形:
你正深入开发一个功能。文件只写了一半。测试正在失败(故意的)。
然后突然:
- “嘿,你能快速在 main 上修复这个热修复吗?”
- “你能在本地审查这个 PR 吗?”
于是你开始这套操作:
git status
git stash
git checkout main
之后…
git checkout feature/my-work
git stash pop
# 💥 conflicts
上下文丢失。流程中断。信心动摇。
Git 多年来一直有解决方案——但仍有许多开发者没有使用它:git worktree。
什么是 git worktree? 🌳
git worktree 允许你同时检出同一仓库的多个分支,每个分支在自己的目录中。
关键概念
- 一个 Git 仓库
- 多个工作目录
- 每个目录都有各自检出的分支
你并没有再次克隆仓库,也没有复制历史。你只是创建了同一仓库的另一个视图。
并行检出,无痛体验。
git worktree 如何工作(概念层面) 🧠
普通的 Git 仓库:
- 一个
.git目录(历史、对象、引用) - 一个工作目录(你的文件)
使用 worktree 时:
- 仍然只有一个
.git - 有多个工作目录
每个 worktree:
- 位于不同的分支上
- 拥有自己的文件
- 与其他 worktree 完全隔离
共享的内容
- Git 历史、提交、对象
隔离的内容
- 已检出的分支
- 工作文件
- 未提交的更改
多个终端、多个文件夹,同一个仓库。
git worktree vs traditional branch switching ⚖️
Traditional workflow
- 一个工作目录
- 同时只能有一个分支
- 经常需要 stash
- 容易丢失上下文
With git worktree
- 不需要 stash
- 没有脏工作树问题
- 不会在错误的分支上意外修改
- 真正的并行工作
简而言之: 分支切换 → 串行工作;worktrees → 并行工作。
Source: …
实际使用案例(真实工作流) 🚀
功能开发 + 热修复 🚑
你正在 feature/auth 分支上工作,这时 main 分支出现了生产环境的 bug。
git worktree add ../repo-hotfix main
现在的目录结构是:
repo/ → feature/auth
repo-hotfix/ → main
修复 bug,提交并推送——无需触碰正在进行的功能开发。
本地审查 PR 🔍
检查同事的分支:
git worktree add ../repo-pr-123 pr/some-feature
在编辑器中打开它,运行测试,随意探索。你的主工作区保持不变。
实验和探索性开发 🧪
想尝试一次风险较大的重构?
git worktree add ../repo-experiment experiment/refactor-auth
如果成功 → 保留下来。若失败 → 删除该工作树。零风险,零混乱。
发布或 QA 验证 🧪
保持一个稳定分支已检出:
git worktree add ../repo-release release/1.4
进行构建、验证修复、执行 QA,同时在其他位置继续正常的功能开发。
步骤详解:使用 git worktree 🛠️
创建一个新的 worktree
在你的主仓库中:
git worktree add ../my-repo-hotfix main
- 创建一个新目录
- 在该目录检出
main分支 - 与同一个 Git 仓库关联
使用新分支创建 worktree
git worktree add -b feature/payments ../my-repo-payments
非常适合开始新工作。
列出所有 worktree
git worktree list
示例输出:
/path/repo abc123 feature/auth
/path/repo-hotfix def456 main
/path/repo-experiment ghi789 experiment/refactor
正常使用
在 worktree 中,你可以运行常规命令:
git statusgit commitgit push
所有行为都与普通仓库完全相同。
移除 worktree(清理 🧹)
完成后:
git worktree remove ../my-repo-hotfix
- 清理 Git 元数据
- 安全删除 worktree
⚠️ 避免手动删除文件夹;请始终使用 git worktree remove。
常见的陷阱与注意事项 ⚠️
- 一个分支 = 一个工作树 —— 不能两次检出同一个分支。
- 始终使用
git worktree remove,不要手动删除文件夹。 - 共享文件如
.env、node_modules或构建产出可能需要隔离(例如.env.local或每个工作树的配置)。 - 你的 IDE 可能会打开多个项目;这通常是功能而非错误。
当 git worktree 发光时 — 以及何时不适用 ✨
它在以下情况下表现出色
- 你需要在特性和热修复之间切换
- 你经常被打断
- 你在处理大型仓库
- 你希望保持清晰的思维分离
在以下情况下可能不值得使用
- 仓库很小
- 你一次只做一件事
- 你仍在学习 Git 基础
结论与要点 🎯
git worktree 并非小众功能;它是生产力的倍增器。
关键要点
- 不要仅为切换上下文而使用 stash
- 同时在多个分支上工作
- 保持你的工作流,保持你的理智
- 实现干净、明确、并行的工作
一旦尝试过,你会觉得回到不断 stash 的方式…很痛苦。下次中断时试试 git worktree,看看它如何改变你的工作流程。