Git Worktree
最后更新
git worktree 让一个仓库同时拥有多个工作目录,每个目录检出不同的分支。你不用先贮藏手头的工作再切换分支,而是在另一个文件夹里检出那个分支:审查 PR、做紧急修复,或者在编辑一个分支时构建另一个分支,它们共享同一份 .git 历史。
在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。
语法
| 命令 | 作用 |
|---|---|
git worktree add ../hotfix hotfix | 在相邻的文件夹中检出 hotfix |
git worktree add -b new ../new | 创建一个分支并为它创建工作树 |
git worktree list | 列出所有工作树及其分支 |
git worktree remove ../hotfix | 删除一个工作树 |
git worktree prune | 清理失效的工作树记录 |
完整示例
在 main 上修复 bug,同时不打扰你的功能分支。
| 步骤 | 命令 | 结果 |
|---|---|---|
| 1 | git worktree add ../fix main | main 被检出到 ../fix |
| 2 | 在 ../fix 中修复并提交 | main 上的紧急修复完成 |
| 3 | git worktree remove ../fix | 清理完毕,功能分支完全没被动过 |
git worktree 常见问题
git worktree 是什么?
工作树是附加在同一个仓库上的另一个工作目录,检出的是不同的分支或提交。它让你可以在不同文件夹中同时检出多个分支,全部共享同一份
.git 历史,所以同时处理两个分支时,不需要贮藏改动或重新克隆。怎么添加工作树?
运行
git worktree add <path> <branch>,例如 git worktree add ../hotfix hotfix。Git 会把该分支检出到新文件夹中。如果想同时创建新分支,使用 git worktree add -b <newbranch> <path>。什么时候该用工作树,而不是切换分支?
当切换分支会打断你的时候就用它:你有未提交的工作,有一个不想中断的漫长构建,或者需要把两个分支并排对比。工作树把另一个分支放在单独的文件夹里,完全不影响你当前的分支。
怎么删除工作树?
运行
git worktree remove <path>。如果文件夹是手动删除的,运行 git worktree prune 清理失效的记录。主工作树(最初的仓库文件夹)不能删除,只能删除你额外添加的那些。可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行
git worktree,无需安装。Coddy 的免费互动 Git 课程也会一步步教你分支工作流。