Git worktree — 停止暂存,开始并行工作

发布: (2026年1月11日 GMT+8 20:35)
7 min read
原文: Dev.to

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 status
  • git commit
  • git push

所有行为都与普通仓库完全相同。

移除 worktree(清理 🧹)

完成后:

git worktree remove ../my-repo-hotfix
  • 清理 Git 元数据
  • 安全删除 worktree

⚠️ 避免手动删除文件夹;请始终使用 git worktree remove

常见的陷阱与注意事项 ⚠️

  • 一个分支 = 一个工作树 —— 不能两次检出同一个分支。
  • 始终使用 git worktree remove,不要手动删除文件夹。
  • 共享文件如 .envnode_modules 或构建产出可能需要隔离(例如 .env.local 或每个工作树的配置)。
  • 你的 IDE 可能会打开多个项目;这通常是功能而非错误。

当 git worktree 发光时 — 以及何时不适用 ✨

它在以下情况下表现出色

  • 你需要在特性和热修复之间切换
  • 你经常被打断
  • 你在处理大型仓库
  • 你希望保持清晰的思维分离

在以下情况下可能不值得使用

  • 仓库很小
  • 你一次只做一件事
  • 你仍在学习 Git 基础

结论与要点 🎯

git worktree 并非小众功能;它是生产力的倍增器。

关键要点

  • 不要仅为切换上下文而使用 stash
  • 同时在多个分支上工作
  • 保持你的工作流,保持你的理智
  • 实现干净、明确、并行的工作

一旦尝试过,你会觉得回到不断 stash 的方式…很痛苦。下次中断时试试 git worktree,看看它如何改变你的工作流程。

Back to Blog

相关文章

阅读更多 »

常见 Git 错误(以及如何修复)

常见的 Git 错误及其修复方法 1. 在 main 分支上提交而不是在特性分支上 解决方法: bash git checkout -b feature-branch git reset --soft HEAD~1 git ...