Git Worktree:开启多任务并行开发新姿势
在日常开发中,你是否遇到过这样的场景:
正在 feature分支写得起劲,突然接到一个紧急hotfix任务。你想对比两个分支的代码,但只能在一个窗口里切来切去。 切换分支后,庞大的项目需要重新编译,白白浪费十几分钟。
通常我们会用 git stash 把当前的修改存起来,切到新分支处理完再切回来 pop。但如果任务多起来,stash 列表就会变得一团糟。
今天我们要介绍的 Git Worktree,就是解决这些痛点的“终极利器”。
什么是 Git Worktree?
git worktree 允许你在同一个本地仓库中,同时拥有多个独立的工作目录。
每个工作目录(Worktree)都可以指向不同的分支,且它们共享同一个 .git 目录(即共享所有的提交历史和对象)。
结构示意图
如上图所示,你不需要克隆(clone)多次仓库,只需要在不同的文件夹里“检出”不同的分支即可。
为什么要用它?
1. 真正的并行开发
你可以同时打开两个 IDE 窗口:一个在写新功能,另一个在修 Bug。互不干扰,无需频繁切换分支。
2. 告别 Stash 混乱
不再需要为了临时切换而强行 commit 或 stash。你的工作现场永远是保留的。
3. 节省编译时间
在大型项目中,切换分支往往意味着大量文件的时间戳改变,导致编译器重新扫描。使用 Worktree,每个分支都有自己的文件夹,编译产物也是独立的,切换任务时几乎是“秒开”。
4. 共享仓库状态
因为它们共享同一个 .git 文件夹,你在一个 Worktree 里 fetch 了远程代码,在另一个 Worktree 里也能立刻看到,非常方便。
快速上手指南
使用 git worktree 只需掌握以下几个核心命令:
1. 添加一个新的工作树
假设你现在在 main 分支,想去 hotfix 分支修个 Bug:
# 命令格式:git worktree add <路径> <分支名>
git worktree add ../my-project-hotfix hotfix
这会在上一级目录创建一个 my-project-hotfix 文件夹,并自动切到 hotfix 分支。
为什么是 ../ (上层目录)?
在 git worktree add 命令中使用 ../ 来指定新工作树的路径是一种推荐的最佳实践。主要原因如下:
- 避免“嵌套仓库”的混乱
:如果将新工作树创建在当前 Git 仓库的子目录下,虽然 Git 会自动忽略它,但对于某些 IDE 或文件搜索工具来说,可能会将其视为当前项目的一部分,导致索引混乱或搜索结果重复。 - 保持清晰的项目结构
:将不同的工作树放在与主仓库平级的目录中(例如 /work/my-project/和/work/my-project-hotfix/),可以使项目结构更清晰,方便管理和切换。 - 防止误操作
:将工作树独立于主仓库之外,可以有效避免在主仓库中进行文件清理或移动操作时,意外影响到其他工作树的内容。
因此,将新工作树创建在当前目录的平级位置,能提供更好的隔离性和管理便利性。
2. 查看当前所有的工作树
想知道自己开了多少个“分身”?
git worktree list
3. 移除工作树
任务完成后,直接删除文件夹并清理记录:
# 命令格式:git worktree remove <路径>
git worktree remove ../my-project-hotfix
总结
git worktree 是一个被严重低估的 Git 功能。它比 git stash 更直观,比 git clone 多份仓库更节省空间和同步成本。
如果你经常需要在多个任务之间快速切换,或者受够了频繁切换分支带来的重新编译,那么 Git Worktree 绝对值得你一试!
最后,欢迎试用博主最近开发的项目:
1. MicroClaw : MicroClaw:用 Rust 构建 OpenClaw
2. SkillsYoga : SkillsYoga: 轻松管理你的本地 Skills (开源)