本文翻译自Git Worktree

我们或许会面临这样的情形:正在开发某个功能时一个bug出现并且需要及时修复、处于一个耗时的构建过程中突然需要在另外一个分支做快速修复、发现了一个不相关的bug想在不污染当前分支的前提下修复。不论哪种情况,通常我们都想再次clone一个仓库到本地,然而Git已经提供了对应的工具。

这就是worktree,通过它我们可在不必多次clone的前提下通过不同的分支创建不同的工作空间。

可通过git worktree add ../my_second_worktree the_other_branch来创建一个新的worktree,该指令会生成一个名为my_second_worktree的新文件夹并使用``the_other_branch分支中的代码,之后可在里面独立运行并使用各种常规的git`指令。

可通过下述指令来快速查看创建的所有worktree

$ git worktree list
/Users/charlesfeval/git/my_repo                   bd502b1 [user/chfeval/240614_that_feature]
/Users/charlesfeval/git/my_repo--other_worktree   15d0988 [user/chfeval/240616_fix_versionin]
/Users/charlesfeval/git/my_repo--bugfix_2  9c26708 [user/chfeval/240617_fix_rockin]

如果已经用worktree完成了相关操作,可使用类似 git worktree remove ../my_second_worktree来删除。

下面是官方文档上关于该指令的说明

usage: git worktree add [-f] [--detach] [--checkout] [--lock [--reason <string>]]
                        [-b <new-branch>] <path> [<commit-ish>]
   or: git worktree list [-v | --porcelain [-z]]
   or: git worktree lock [--reason <string>] <worktree>
   or: git worktree move <worktree> <new-path>
   or: git worktree prune [-n] [-v] [--expire <expire>]
   or: git worktree remove [-f] <worktree>
   or: git worktree repair [<path>...]
   or: git worktree unlock <worktree>