Menu
CoddyTech

Git Worktree

最后更新

git worktree 让一个仓库同时拥有多个工作目录,每个目录检出不同的分支。你不用先贮藏手头的工作再切换分支,而是在另一个文件夹里检出那个分支:审查 PR、做紧急修复,或者在编辑一个分支时构建另一个分支,它们共享同一份 .git 历史。

在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。

git worktree 在单独的文件夹里检出第二个分支:一个仓库,两个工作目录。

语法

命令作用
git worktree add ../hotfix hotfix在相邻的文件夹中检出 hotfix
git worktree add -b new ../new创建一个分支并为它创建工作树
git worktree list列出所有工作树及其分支
git worktree remove ../hotfix删除一个工作树
git worktree prune清理失效的工作树记录

完整示例

在 main 上修复 bug,同时不打扰你的功能分支。

步骤命令结果
1git worktree add ../fix mainmain 被检出到 ../fix
2在 ../fix 中修复并提交main 上的紧急修复完成
3git 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 课程也会一步步教你分支工作流。
Coddy 编程语言插图

在 Coddy 学习 Git

开始