TranFu
返回

什么是 git worktrees,为什么要使用它们?

TFTranFu 精选2026/06/16 20:58

GitHub 博客文章介绍了 git worktrees 的用途、与传统分支切换和 stash 流程的差异,并说明它们为何在 AI 驱动的并行开发场景中重新受到关注。

什么是 git worktrees,为什么要使用它们?
图片来源:github.blog
文章作者、来源:github.blog

正文

最近,git 里最火的概念似乎是 worktree。不过……这多少有点好笑,因为它早在 2015 年就已经存在了。

但不管怎样,worktree 确实很酷。你可能会好奇为什么要用它,它和分支有什么不同,以及为什么它突然变得这么流行。

假设你生活在一个没有 worktree 的世界里,正在处理一个工单,突然来了一个紧急 bug,你不得不切换上下文。

首先,你可能会先 stash 当前工作:

然后切换到 main 分支并更新:

接着修好问题、提交,并 push 这个分支:

然后,在合并一个 pull request 之后,你可能会回到自己的电脑上,拉取 main,并删除那个 bug 分支:

接着你就可以回到之前正在开发的功能上:

在不同分支之间来回切换、重新加载文件、根据变更重新安装 node_modules,诸如此类的心智负担很大。上下文切换的成本非常高。

当然,这只是一个基础示例,但有时开发者会用一些更复杂的 git stash 命令来绕开这种混乱,甚至会克隆同一个 repo 的多个副本(这事我也干过)。

有了 worktrees,你不需要离开当前分支,也不需要 stash,原本功能开发的编辑器上下文也会保持不变。

这会立即创建一个名为 hotfix-workspace 的同级文件夹,以 main 为基础,并检出一个名为 hotfix-bug 的新分支。

现在,你可以在新的编辑器窗口中打开那个文件夹(或者 cd 进去),然后修复这个 bug。原来的编辑器窗口会保持在你离开时的状态,完全不受影响。

你像之前一样在线合并 pull request;合并完成后,直接删除这个临时文件夹即可。

这样顺畅多了!Worktree 的用途也不止于 git 命令行。比如,VS Code 已经内置了完整的 worktree 支持。你有很多选择!而且无论在哪里工作,worktree 都能让你完全避免 stash 冲突的风险,不会打断编辑器状态,也能真正做到并行工作。

在很长一段时间里,worktree 都相对冷门。大多数开发者从未听说过它们,要么是因为 Git GUI 不支持 worktree(或者把它们当成二等功能),要么是因为大家通常只是沿用熟悉的流程:创建 feature branch、开发、提交 PR、合并,然后循环往复。

现在,开发者的工作方式已经变了。AI 让我们比软件开发史上任何时候都更需要并行工作。开发者会并行运行大量 session,而“代码审查文化”正在超越“代码编写文化”。

有了 worktree,agent 和人类都能更好地并行工作。这已经是 GitHub Copilot app 的默认模式,也是许多其他现代工具的默认模式。

Worktree 确实能解决很多问题,但也有一些地方需要注意。

依赖膨胀:每个 worktree 文件夹都需要一份项目依赖的独立副本。如果你在多个 worktree 里运行 npm install 或 pip install,电脑的存储空间可能很快就被占满。

文件夹管理:你需要删除 worktree 文件夹,避免父目录随着时间推移变得杂乱。GitHub Copilot app 这类应用通常会帮你处理这件事,但如果你是在终端里自己操作,可能仍然需要手动完成。

全局 .gitignore 要求:如果你在主仓库目录里创建 worktree 文件夹,就必须手动把它们加入 .gitignore,以免不小心被 Git 跟踪。你也可以把这些 worktree 放在主仓库之外(很多应用默认就是这么做的),但这一点仍然值得注意。

单分支限制:为了防止数据损坏,Git 不允许你在两个不同的 worktree 中同时检出完全相同的分支。

问得好!很棒的一点是,它们开箱即用。打开应用后,首页会有一个下拉菜单,询问你想在哪里运行新的 session。默认选项就是新的 worktree。

然后,一旦你启动了一个新的 session,就可以点击应用顶部的 session 名称,你会看到这个 worktree 自动生成的(很有趣的)名称,以及它所在的路径、这个 worktree 对应的项目,还有你已做更改的详细信息。

我会给出一个尽可能资深开发者式的回答:看情况!你可能更喜欢某一种工作方式。你可能不会做太多并行工作,也喜欢分支和 stash 这种心智模型。你也可能从现在开始只用 worktree。你还可能两种都想用!

选择权在你手里,现在就可以在 GitHub Copilot 应用中把这些方式都试一遍。

Cassidy 是 GitHub 的开发者倡导高级总监。她喜欢构建软件、为初创公司提供建议,也喜欢教开发者如何构建得更好。她每周都会在 cassidoo.co/newsletter 发布 newsletter,你可以在收件箱里看到她的最新动态、练习编程题,以及收获一个笑话!

了解我作为高级管理者的一天,在使用 40 项自动化辅助后变成了什么样,并进一步了解其中一些我最喜欢的自动化。

Qubot 是我们内部由 Copilot 驱动的分析 agent,它让任何 GitHub 员工都可以用自然语言询问关于我们数据的问题。下面是我们在构建它的过程中学到的经验。

GitHub Copilot 如何让每个 session 中更多时间用于有价值的工作,从而让你的 credits 更经用。

订阅我们面向开发者的双周 newsletter,获取技巧、技术指南和最佳实践。

阅读原文

AI解读

这值得关注,因为并行开发、代码审查和 AI agent 会话增加了开发者同时处理多个上下文的需求,worktrees 提供了一种比频繁 stash 和切分支更低干扰的工作方式。

对 AI builder 和开发工具创业者来说,worktrees 可作为多 agent、多会话隔离执行的基础工作区模型;对开发者来说,它可能减少上下文切换和编辑器状态破坏,但需要管理额外目录与依赖占用。

建议开发者在一个低风险仓库中试用 git worktrees,并观察团队工具链、编辑器、依赖安装和清理流程是否适配;工具构建者可关注 worktree 管理、自动清理和会话可视化体验。