Git Worktrees 介绍

Git Worktrees 核心作用:一个本地仓库,同时检出多个不同分支到「不同文件夹」,不用反复 checkout 切分支、不用开多个仓库副本,解决「切分支会覆盖当前代码」的痛点。

✅ Git Worktrees 核心心法(一句话记住):
一个仓库,多文件夹,各文件夹对应独立分支,并行开发互不干扰,不用 stash,不用多克隆,用完即删

1  核心优势

  1. 改 feature 分支时,临时切到 master 修 bug,当前分支的未提交代码完全不用动,不用 stash / 提交临时改动。
  2. 所有 worktree 共享同一个 .git 目录,节省磁盘空间,不用克隆多份仓库。
  3. 所有分支操作(pull/push/commit)在任意 worktree 执行都生效,本质还是同一个仓库。

2 基础概念

  • 主工作区 (main worktree):你最初 git clone 下来的那个文件夹,默认就存在。
  • 链接工作区 (linked worktree):用 git worktree add 新增的文件夹,和主工作区共享 .git,每个链接工作区对应一个独立分支
  • 一个分支只能被一个 worktree 占用,Git 会自动保护,避免冲突。

3 必会命令(高频,够用 99% 场景)

3.1 前提

进入你的主仓库目录(必须在主工作区执行所有 worktree 命令)

3.2 新增 worktree(最常用)

  • 路径建议:和主仓库同级,方便管理(如上 ../xxx)。
  • 如果分支不存在,加 -b 参数新建 + 检出

3.3 查看所有 worktree 列表

会显示:所有工作区的路径、对应分支、是否是「裸分支 / 锁定」,一目了然。

3.4 删除 worktree(用完就删,必做)

两种方式,推荐方式 1(Git 官方推荐,最安全)
方式 2(手动删):先删文件夹,再清理缓存

3.5. 其他常用辅助命令

4 核心使用规则(避坑关键,必看)

✔️ 绝对不能踩的坑

  1. 一个分支只能被一个 worktree 占用,Git 会报错阻止,强行操作会导致代码冲突。
  2. 不要手动删除 worktree 文件夹,一定要用 git worktree remove,否则会残留缓存,导致 list 里还能看到失效路径。
  3. 所有 worktree 共享 .git,所以不要修改任何 worktree 里的 .git 目录,会全量污染。
  4. 未提交的改动是属于对应 worktree 的,切换 worktree 文件夹即可直接继续开发,不用管其他工作区。

✔️ 最佳实践

  1. 临时用的分支(比如修 bug、临时测试),用完立刻删对应的 worktree,保持整洁。
  2. 长期维护的分支(dev/master),可以保留对应的 worktree,不用反复创建删除。
  3. 在任意 worktree 里执行 git pull/push/commit 都可以,效果和主仓库完全一致。

 

5 生产级「正确用法」3 个高频核心场景(最全、无坑,直接套用)

所有场景前提:你当前在主工作区(比如 my-project),正在开发 feature/xxx 分支,代码写到一半、有未提交改动,完全不用 stash、不用 commit 临时代码,这是 worktree 的核心价值!

5.1 场景 1:紧急修复线上 master 的 bug(最常用,你问的核心场景)

需求:master 有线上 bug → 基于 master 新建 bugfix 分支 → 单独开 worktree 修复 → 不影响当前开发的 feature 分支
✅ 核心亮点:修复完回到原工作区,你的 feature 分支代码还是「写到一半」的状态,无缝继续开发,零心智负担

5.2 场景 2:基于 dev 分支,并行开发 2 个不同需求(高频协作场景)

需求:你正在 dev 分支开发需求 A,突然要同步开发需求 B → 开 2 个独立 worktree,互不干扰
✅ 此时你有 3 个文件夹:
  • my-project:需求 A
  • my-project-reqB:需求 B
  • my-project-test:技术调研
所有文件夹共享一个.git,每个文件夹是独立分支,改任何一个都不会影响其他,提交 /push 各自分支即可。

5.3 场景 3:只读查看 master/dev 分支的最新代码(无修改需求)

这是唯一「直接检出 master/dev」的合法场景:只看不改,用来核对生产代码、查历史逻辑,不做任何提交
✅ 进入my-project-master,只看代码、查日志,看完直接删除这个 worktree 即可。

三、✅ 补充 2 个「必知避坑细节」(你大概率会遇到)

1. 修复完 bug,分支合并后,如何清理本地的 bugfix 分支 + worktree? 

2. 一个分支「被占用」了,Git 报错怎么办?

Git 的规则:一个分支,只能被一个 worktree 占用,如果报错 fatal: 分支xxx is already checked out at xxx,原因只有 2 个:
  • 原因 1:这个分支已经开了对应的 worktree,去git worktree list查看,用就行,不用重复创建;
  • 原因 2:之前手动删了 worktree 文件夹,没执行remove,缓存残留 → 执行git worktree prune清理缓存即可。

分类&标签

Category : Git