别再频繁切换分支:手把手教你使用 Git Worktree 提高开发效率

正在处理紧急 Bug 却不想 stash 当前代码?Git Worktree 允许你在同一仓库中同时开启多个工作目录。本文将带你深度掌握这一“开发者神技”。

别再频繁切换分支:手把手教你使用 Git Worktree 提高开发效率

在日常开发中,你是否遇到过这种场景:你正在 feature 分支写得起劲,突然老板跑来让你紧急修复一个 main 分支的 Bug。

通常你的做法是:

  1. git stash 暂存当前的修改。
  2. 切换到 main 分支。
  3. 修复 Bug,提交。
  4. 切回 feature 分支,git stash pop

这个过程不仅繁琐,而且如果你的项目很大(如依赖安装多、编译时间长),频繁切换分支会导致开发环境重建,浪费大量时间。Git Worktree 就是解决这个痛点的“银弹”。


什么是 Git Worktree?

简单来说,git worktree 允许你在同一个仓库中,同时拥有多个检出的工作目录

每个工作树都关联到不同的分支,它们共享同一个 .git 目录。这意味着你可以在文件夹 A 里写新功能,在文件夹 B 里修 Bug,两者互不干扰,且不需要重复克隆仓库。


核心操作指南

1. 创建一个新的工作树

如果你想在不切离当前分支的情况下,去修复 hotfix 分支:

git worktree add ../project-hotfix hotfix

  • ../project-hotfix:新文件夹的路径。
  • hotfix:你想要检出的分支名。

执行后,你会发现上级目录下多了一个 project-hotfix 文件夹,里面的代码正是 hotfix 分支的内容。

2. 查看所有工作树

忘记自己开了多少个工作树?执行:

git worktree list

3. 完成任务并移除

当 Bug 修复并合并后,你可以安全地移除工作树:

# 1. 手动删除目录(或使用命令)
git worktree remove ../project-hotfix


进阶技巧:从零创建一个干净的工作空间

如果你想基于远程分支创建一个全新的环境,可以这样做:

git worktree add -b <新分支名> <路径> <远程分支名>


为什么它比 Stash 更好用?

特性 Git Stash Git Worktree
并发性 一次只能在一个分支工作 多个分支同时运行/编译
上下文保留 切换分支会丢失未提交的状态 每个目录保留独立的编辑器状态
安全性 忘记 pop 容易导致代码堆积 物理路径隔离,逻辑清晰
对比 很难对比不同分支的运行表现 可以直接在两个目录下同时启动服务对比

使用注意事项 (Caveats)

  1. 不能在两个工作树中检出同一个分支:Git 为了防止索引冲突,禁止两个工作树同时指向同一个 HEAD。
  2. 路径管理:建议将工作树放在主仓库目录之外(如上文中的 ../),这样可以避免主仓库的 .gitignore 配置出现混乱。
  3. 依赖问题:如果你使用的是 Node.js 等依赖重型的语言,每个工作树都需要独立执行 npm install

总结

Git Worktree 是高级开发者的隐形翅膀。它将你的思维从“线性切换”中解放出来,步入“并行处理”的新维度。下次遇到紧急任务,别再 stash 了,试试 git worktree add 吧!