一日一技:使用 Git Worktree 实现代码的“影分身术”

Page content

一日一技:使用 Git Worktree 实现代码的“影分身术” by 未闻Code

摄影:产品经理
全熟多汁的牛排

相信很多开发者都有过这样的经历:你正在一个叫 feature-A 的分支上奋笔疾书,思路如泉涌,代码写了一半。突然,产品经理或者监控报警告诉你:线上的 main 分支出了一个 P0 级的 Bug,需要你立刻、马上、Right Now 修复。

这个时候,你通常有两个选择:

  1. 用 git stash 暂存:把你写了一半的代码藏起来,切换到 main 修 Bug,修完再切回来 git stash pop。缺点是不仅打断心流,而且切回来时常常面临满屏的冲突,心态瞬间爆炸。
  2. 重新 git clone:在电脑硬盘的另一个角落,重新拉取一份完整的代码库。缺点是慢,而且占用硬盘空间,特别是遇到庞大的 node_modules 或者复杂的 Python 虚拟环境,重新安装依赖的时间足够你喝三杯咖啡了。

今天,我们要介绍一个 Git 隐藏已久的神技——Git Worktree。它能完美解决这个问题。

什么是 Git Worktree?

git worktree 允许你为同一个 Git 仓库同时创建多个物理工作区(文件夹),并且每个工作区可以检出不同的分支。

底层其实只有一个 .git 数据库,你在多个文件夹里所有的 commit、branch 都是共享的,但表面上你拥有了多个互不干扰的项目文件夹。这就是代码的“影分身术”。

如何使用?

它的用法非常简单,核心只有三个命令:

1. 开启影分身(新建工作区)

假设你现在在 my-project 文件夹下,正在开发 feature-A。现在你需要修 main 的 bug:

# 在当前项目文件夹的外面,新建一个叫 hotfix-dir 的文件夹,并基于 main 分支检出
git worktree add ../hotfix-dir main

瞬间,你在 my-project 的同级目录下得到了一个全新的 hotfix-dir 文件夹! 你直接用 VSCode 等编辑器打开 hotfix-dir,里面干干净净就是 main 的代码。你在这里修 Bug、测试、提交,而你原本在 my-project 里写了一半的 feature-A 代码,原封不动地躺在那里,连编辑器标签页都不需要关。

提示:如果目标分支不存在,Git 会自动帮你基于当前状态创建一个新分支并拉出一个文件夹。

2. 查看所有分身

时间久了,你可能忘了自己拉了多少个文件夹。可以通过以下命令查看:

git worktree list

这会列出你当前仓库关联的所有物理路径以及它们对应检出的分支。

3. 解除影分身(清理工作区)

当 Bug 修完,那个临时拉出来的 hotfix-dir 文件夹没用了怎么办? 你可以直接在资源管理器/终端里像删普通文件夹一样把它删掉(rm -rf ../hotfix-dir)。

删掉之后,告诉 Git 底层清理一下记录:

git worktree prune

或者,你也可以使用更优雅的命令直接移除:

git worktree remove ../hotfix-dir

AI 时代的大杀器:并行计算与多智能体(Multi-Agent)

以前我们认为 git worktree 只是为了防止程序员被打断的效率工具,但在进入 Agent(智能体)时代的今天,它的意义被无限放大了。

最近在研究基于 AI Agent 的自主编程时,我发现 Anthropic 内部在使用 Multi-Agent(多智能体)组队时,大量使用了 Git Worktree 的机制。

当我们要重构一个复杂的模块,但不确定哪种技术方案最好时:

  • 如果是人类或单 Agent:只能先试 A 方案,不行再回滚代码试 B 方案……这是串行试错,极其缓慢。
  • 如果是 Multi-Agent + Worktree:主 Agent 可以瞬间执行三次 git worktree add,在硬盘上拉出三个平行文件夹。然后派出三个子 Agent(SubAgent),同时在这三个文件夹里独立写代码、装依赖、跑测试。三个 Agent 物理隔离互不干扰,但它们的成果都汇总在同一个底层的 .git 里。最后,谁的测试跑分高、代码质量好,就合并谁的分支,删掉另外两个。

这是用并行计算的方式在做决策。用三分之一的时间,探索了三倍的可能性。

下次当你写代码再被打断,或者想让你的本地 AI Agent 帮你“兵分几路”测试代码时,不妨试试 git worktree 这个魔法吧。

END

未闻 Code·知识星球开放啦!

一对一答疑爬虫相关问题

职业生涯咨询

面试经验分享

每周直播分享

......

未闻 Code·知识星球期待与你相见~


原文链接