你可能遇到过这样的情况:你正在开发一个功能时,突然有一个 bug 出现,你需要马上开始修复它。或者你正在进行一个漫长的构建任务,但需要在另一个分支上快速构建一个版本。又或者你发现了一个不相关的 bug,想修复它但不想污染当前分支。无论是哪种情况,你可能都想过使用同一个代码库的第二份克隆。然而,Git 为此提供了一个更好的工具。
它叫做 worktree。Git worktree 是一种简单的方法,可以为另一个分支创建一个单独的工作目录,而无需多次克隆相同的代码库。
- 可以同时修复多个 bug: 你可以为每个 bug 创建一个工作目录,并行进行修复,提高修复效率。
- 开发新功能的同时进行代码审查: 你可以在一个工作目录中进行代码审查,同时在另一个工作目录中继续开发新功能。
- 测试不同的代码版本: 你可以为不同的代码版本创建工作目录,方便进行比较和测试。
如何使用 Git Worktree
你可以使用以下命令创建一个新的 worktree:
git worktree add ../my_second_worktree the_other_branch
这个命令会生成一个新文件夹,里面会检出 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
Git Worktree 官方文档用法
用法:
git worktree add [-f] [--detach] [--checkout] [--lock [--reason <string>]]
[-b <new-branch>] <path> [<commit-ish>]
或:
git worktree list [-v | --porcelain [-z]]
或:
git worktree lock [--reason <string>] <worktree>
或:
git worktree move <worktree> <new-path>
或:
git worktree prune [-n] [-v] [--expire <expire>]
或:
git worktree remove [-f] <worktree>
或:
git worktree repair [<path>...]
或:
git worktree unlock <worktree>