Git Worktrees

同时处理多个分支而无需 stash —— 每个分支在各自的文件夹中。

Worktrees 解决日常开发中最令人沮丧的问题之一:需要在正在进行某些工作时切换分支。使用 worktrees,你不需要切换 —— 你在第二个文件夹中打开另一个分支并同时处理两者。

什么是 Git Worktree?

通常,一个 git 仓库有一个工作目录 —— 你的文件所在的文件夹。在任何时刻,恰好一个分支在该文件夹中检出。如果你想查看不同的分支,你必须检出它,这会用自己的文件版本替换你的文件。如果你还没有提交当前工作,你必须先 stash 它,这很烦人且容易出错。

Worktree 是链接到同一 git 仓库的第二个(或第三个、第四个)工作目录。每个 worktree 有自己的分支检出、自己的文件状态和自己的历史。它们都共享相同的 .git 文件夹和提交历史 —— 它们只是同一仓库的不同窗口。

一个具体示例:你的 AI agent 正在 feature/payments 上构建新功能到一半。一位同事要求你审查他们在 fix/login-bug 上的 PR。与其 stash 你的功能工作,不如在单独的文件夹中为 fix/login-bug 创建一个 worktree。你在那里审查 PR,而你的功能分支在其原始文件夹中保持不受影响。

创建 Worktree

  1. 打开 Git 面板 —— 按 Cmd+G
  2. 点击面板顶部的 Worktrees 标签
  3. 点击 + Add Worktree
  4. 选择一个分支 —— 从列表中选择现有分支或输入新分支名称创建一个
  5. 选择新 worktree 的文件夹位置(默认情况下,1DevTool 建议在当前项目文件夹旁边创建一个文件夹)
  6. 点击 Create —— 1DevTool 运行 git worktree add 并将新 worktree 文件夹打开为活跃工作区

新 worktree 现在列在 Worktrees 标签中,与你的主 worktree 并列。

Git worktree

Worktree 终端

当 1DevTool 创建 worktree 时,它还会打开一个作用域到该 worktree 文件夹的新终端。分支名称出现在终端标题中,这样你始终知道你在哪个分支上工作。

该终端中的 AI agent 在 worktree 文件夹中操作 —— 它可以读取和写入文件、运行命令并在那个分支上进行更改,而不会感知或干扰你的其他分支。

Add terminal for git worktree

Git worktree terminal with branch name

你可以在多个 worktrees 中同时运行 agent。一个 agent 处理支付功能,另一个在不同分支上修复 Bug。两个 agent 都有自己的终端、自己的文件上下文和自己的分支 —— 它们不会相互冲突。

移除 Worktree

当你完成一个 worktree —— PR 已合并,分支已删除 —— 你可以干净地移除它:

  1. 打开 Git 面板 并转到 Worktrees 标签
  2. 找到你想要移除的 worktree
  3. 点击旁边的 trash icon
  4. 确认删除

这会移除 worktree 文件夹并从 git 注销(相当于 git worktree remove)。分支本身不会被删除 —— 只是工作目录。如果需要,你可以稍后重新创建 worktree。

提示: 使用 worktrees 在功能分支上运行 AI agent,同时保持 main 稳定。Agent 不会意外破坏你的 main 分支。

Worktrees 是 git 中最被低估的功能之一。在 AI 辅助开发的背景下 —— agent 可能在几分钟内进行数十次文件更改 —— 能够将每个 agent 的工作隔离到其自己的分支和文件夹是一个重要的安全网。