






























这是一个非常经典的问题,特别是在使用 Git 进行并行开发时。简单来说,Branch(分支)是逻辑上的概念,而 Worktree(工作树)是物理上的概念。
你可以把它们的关系理解为:Branch 是你想要走的“路”,而 Worktree 是你脚下踩的“地”。
为了让你更直观地理解,我为你整理了一个核心对比表,随后我会详细拆解它们的区别和协作方式。
| 维度 | Branch (分支) | Worktree (工作树) |
|---|---|---|
| 本质 | 逻辑指针。指向某个提交(Commit)的轻量级引用。 | 物理目录。包含实际文件、文件夹的工作空间。 |
| 解决痛点 | 解决代码版本的隔离问题(比如开发新功能不影响主代码)。 | 解决开发场景的并行问题(比如同时修Bug和写新功能)。 |
| 操作体验 | 在同一个目录下,通过 git checkout 或 switch 切换,文件会变来变去。 |
在不同的文件夹下,同时打开多个窗口,互不干扰,文件各改各的。 |
| 存储方式 | 存储在 .git/refs 中,占用空间极小。 |
每个 Worktree 都有独立的文件夹,但共享 .git 对象库(节省磁盘空间)。 |
Branch 就像是电影胶卷的不同剪辑线。
main 分支,你看到的是稳定版代码;切换到 feature 分支,你看到的是新功能代码。git stash),切回去修 Bug,修完再切回来恢复现场。这非常打断思路。Worktree 就像是给你的电脑增加了显示器,或者直接克隆了另一个工位。
/path/to/project-main 里继续写你的复杂功能,同时在 /path/to/project-hotfix 里从容地修复紧急 Bug。.git/objects)。这意味着你不需要重新下载历史数据,既快又省硬盘空间。feature-A 上改了一堆文件,还没写完,不想提交(因为代码很乱)。main 分支修复。git worktree add ../project-hotfix main -b fix-bug../project-hotfix,里面是干净的 main 分支代码。v1.0 版本和 v2.0 版本的某个文件具体差别。与其切来切去记不住,不如开两个 Worktree,左边屏幕放 v1.0,右边屏幕放 v2.0,直接对照查看。如果你决定尝试 Worktree,这几个命令就够用了:
project-hotfix 的文件夹,并关联 main 分支):
git worktree add ../project-hotfix main
git worktree list
git worktree remove ../project-hotfix
总结建议:
不要把它们看作对立的选项。Branch 是基础,Worktree 是增强工具。 当你在同一个仓库需要同时处理两件不同的事情时,Worktree 就是那个能让你从“频繁切换”的痛苦中解脱出来的神器。
出处:http://www.cnblogs.com/lightsong/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。