Git Worktree 入门教程
Git Worktree 入门教程
日常开发中,我们经常遇到这样的场景:
你正在 dev 分支上开发一个新功能,代码写了一半,改动了很多文件,但是还没有 commit。突然,线上出现了一个 Bug,需要你立刻切换到 master 分支进行修复。
这时候,你通常有两个选择:
- 使用
git stash:把当前的修改“藏”起来,修完 Bug 再通过git stash pop恢复。但这容易导致冲突,而且如果储藏的栈太深,很容易忘记自己存了什么。 - 强制提交:把没写完的代码 commit 上去(比如写一个 WIP),等切回来再 reset。这会弄乱提交历史。
其实,Git 提供了一个更好的方案,叫做 git worktree。
它允许你在同一个仓库中,同时打开多个“工作区”(Working Tree)。每个工作区对应不同的分支,互不干扰。你可以在一个文件夹里修 Bug,在另一个文件夹里继续开发新功能,不需要反复切换分支,也不需要重新 git clone。
一、 快速上手
假设你的项目目录是 app-main,当前位于 dev 分支。
1. 查看当前状态
首先,看一眼现有的工作区。
$ git worktree list
/path/to/app-main (HEAD detached at dev)
目前只有一个,就是你当前所在的主目录。
2. 创建新工作区
现在,我们需要修一个紧急 Bug。我们不希望干扰当前的 app-main 目录。
我们可以基于 master 分支,创建一个名为 app-hotfix 的新目录(通常建议建在项目目录的同级,以免混乱)。
# 语法:git worktree add <新路径> <基于的分支>
$ git worktree add ../app-hotfix master
Preparing worktree (checking out 'master')
HEAD is now at 7f3b1d2 Initial commit
这时候,你的文件系统中会出现一个新文件夹 ../app-hotfix。
3. 并行开发
现在,你可以同时操作这两个目录了。
- 终端 A 停留在
app-main,继续你的dev开发。 - 终端 B 进入
app-hotfix,修复 Bug。
$ cd ../app-hotfix
$ git status
On branch master
nothing to commit, working tree clean
你会发现,这里是一个干净的 master 分支环境,完全没有 dev 分支那些未提交的杂乱文件。即使是 node_modules(如果 .gitignore 忽略了它)通常也需要重新安装,或者通过软链接共享,这保证了环境的隔离性。
4. 清理工作区
Bug 修复完,代码推送到远程后,这个临时工作区就不需要了。
注意:不要直接手动删除文件夹,最好使用 Git 命令移除,以保持元数据清洁。
# 先切回主目录或任意非目标目录
$ cd ../app-main
# 移除工作区
$ git worktree remove ../app-hotfix
再次查看列表,就只剩下主目录了。
$ git worktree list
/path/to/app-main (HEAD detached at dev)
二、 常用命令清单
git worktree 的命令不多,记住下面这几个就足够应对日常需求了。
| 命令 | 说明 | 示例 |
|---|---|---|
git worktree list |
列出所有工作区 | $ git worktree list |
git worktree add <path> <branch> |
创建新工作区并切到指定分支 | $ git worktree add ../hotfix master |
git worktree add -b <new-br> <path> <base> |
基于某分支新建分支并创建工作区 | $ git worktree add -b feature-x ../feature master |
git worktree remove <path> |
删除指定工作区 | $ git worktree remove ../hotfix |
git worktree prune |
清理已手动删除文件夹的陈旧记录 | $ git worktree prune |
三、 几点注意
- 不要同时检出同一个分支:Git 默认不允许两个 worktree 同时位于同一个分支(比如两个目录都切到
dev),因为这会导致索引(index)冲突。 - 存储空间:虽然 worktree 共享
.git目录(版本历史),但每个工作区都有一份独立的代码副本。如果项目非常大,会占用额外的磁盘空间。 - 依赖管理:对于前端项目,新工作区通常需要重新
npm install。
四、 参考链接
(完)

浙公网安备 33010602011771号