Git 和 AI 代理
AI 代理的 Git 工作树:并行运行 Claude Code 和 Codex
git 工作树为每个 AI 编码代理在一个存储库中提供了自己的文件夹和分支。以下是如何为每个代理创建一个、在 Git GUI 中跟踪它们并合并结果而不发生冲突。

git worktree 是链接到同一存储库的额外工作文件夹:它有自己的签出分支、自己的暂存区域和自己的文件,而所有工作树共享相同的提交、分支和远程。这使得 git worktree 成为并行运行 Claude Code 或 Codex 等 AI 编码代理的最简单方法。为每个代理提供自己的工作树,他们可以同时编辑、构建、测试和提交,而无需接触彼此的文件,也无需进行第二次克隆。
一个文件夹中的两个代理共享一个工作树:一个对文件运行测试,另一个正在重写中,并且其中一个的 git checkout 将地面移到另一个下面。单独的克隆可以避免这种情况,但需要它们自己的获取;工作树为您提供单独的文件夹和一个存储库的簿记。
什么是 git 工作树,以及工作树共享什么
每个存储库都以一个工作树开始,即主工作树:git clone 或 git init 创建的文件夹。 git worktree add 创建链接工作树,即附加到相同 .git 数据的额外文件夹。根据官方 git worktree 文档,链接的工作树与存储库共享除每个工作树文件(例如 HEAD 和索引)之外的所有内容。在实践中:
| 存储库的一部分 | 自己的副本还是共享的? | 这对于并行代理意味着什么 |
|---|---|---|
| 工作文件 | 自己的副本 | 一名特工的编辑永远不会覆盖另一名特工的文件 |
HEAD 和签出的分支 | 自己的副本 | 每个代理都留在自己的分支上 |
| 索引(暂存区) | 自己的副本 | 一个工作树中的 git add 在另一个工作树中不暂存任何内容 |
| 提交和对象 | 共享 | 在任何工作树中所做的提交在所有工作树中都是可见的 |
| 分支和标签 | 共享 | 您可以从主文件夹合并代理的分支,无需提取 |
| 存储库配置 | 默认共享 | 遥控器和别名适用于每个工作树 |
有一条规则对于代理很重要:默认情况下,git worktree add 拒绝检出已在另一个工作树中检出的分支。因此,每个代理都需要自己的分支,这正是您在审核时想要的。
如何使用 git worktree add 创建工作树
从存储库内部运行命令,并将新工作树放在它旁边而不是内部,这样编辑器、搜索工具和代理就不会从另一个结帐内部索引一个结帐。这将创建两个工作树,每个工作树都位于从 main 开始的新分支上:
cd ~/code/myapp
git worktree add -b agent/auth-refactor ../myapp-auth main
git worktree add -b agent/flaky-tests ../myapp-tests main
git worktree list-b 创建分支,路径是新文件夹,最后一个参数是开始的提交。 git worktree list 打印每个工作树及其文件夹、提交和分支。要使用已存在的分支,请省略 -b: git worktree add ../myapp-review feature/login。
每个工作树一个 AI 代理:并行工作流程
该模式很简单:一项任务、一个分支、一个工作树、一个代理会话。您作为审阅者留在主工作树中,代理从不共享文件夹。最重要的是你如何分配工作。好的并行任务是:
- 在代码的不同部分,例如
auth/中的重构和billing/中的新测试,因此它们的分支很少接触相同的行。 - 明确完成或未完成:应该通过的失败测试、要添加的端点、要升级的依赖项。
- 小到足以一次性审查。 巨大的代理差异是一个审查问题,无论它来自哪个文件夹。
如何与 git 工作树并行运行 AI 编码代理
提交或隐藏您当前的工作
新的工作树从提交开始,主文件夹中未提交的更改会保留下来,因此每个代理都应该从相同的已提交状态开始。
每个任务创建一个工作树
每个任务运行
git worktree add -b agent/<task> ../<repo>-<task> main一次,或从 Git GUI 创建工作树。准备好各个文件夹
安装依赖项,复制项目所需的环境文件并运行一次构建,以便每个代理从有效的签出开始。
在每个文件夹中启动一个代理
每个工作树打开一个终端并在那里启动您的代理,例如一个工作树中的
claude和另一个工作树中的codex,每个工作树都有一个狭窄的提示来命名其拥有的区域。审查、合并和清理
当代理完成时,读取其差异,将其分支从主工作树中合并,然后删除工作树并删除分支。
cd ../myapp-auth && claude
cd ../myapp-tests && codex在自己的终端中运行每一行;每个代理的测试和构建然后针对其自己的文件运行。
将 Git 工作树与 Claude Code 结合使用
要手动为 Claude Code 提供自己的工作树,请使用纯 Git 创建工作树并在其中启动 claude;然后,代理仅读取和编辑该文件夹并在该分支上提交:
git worktree add ../myapp-auth -b agent/auth
cd ../myapp-auth
claude克劳德·代码的 --worktree 标志
Claude Code 可以为您创建工作树。根据 Claude Code 的工作树文档,claude --worktree feature-auth(或 -w)在名为 worktree-feature-auth 的新分支上的 .claude/worktrees/feature-auth/ 下创建工作树,该新分支从存储库的默认分支分支,除非 worktree.baseRef 设置另有说明。 .worktreeinclude 文件将忽略的文件(例如 .env)复制到每个新工作树中。退出时,Claude Code 会从未命名的会话中删除一个干净的工作树及其分支,并在删除包含更改或新提交的工作树之前进行询问。
claude --worktree feature-auth将 Git 工作树与 Codex CLI 结合使用
Codex CLI 在您启动它的目录中工作,因此每个 Codex 会话一个工作树将每个会话的编辑、测试和提交分开:
git worktree add ../myapp-tests -b agent/tests
cd ../myapp-tests
codexCodex 应用程序和 Codex CLI
OpenAI 的 Codex 应用程序工作树文档 描述了让 Codex 在一个项目中运行多个聊天的工作树。默认情况下,它们根据您选择的分支进入 $CODEX_HOME/worktrees,并以分离的 HEAD 状态而不是分支开始。在聊天标题中,“切换”在工作树和本地结账之间移动聊天,“在此处创建分支”将工作树的工作转换为可以查看和合并的分支。使用 Codex CLI,您可以从项目目录运行 codex,因此可以在您创建的工作树中启动它。
无论哪种方式,这些都是普通的 Git 工作树,对 git worktree list 和读取它的任何 Git GUI 可见。
git worktree GUI:跟踪每个代理的文件夹和分支
当三个或四个代理运行时,最困难的部分是跟踪:哪个分支位于哪个文件夹中,以及哪个代理仍在更改文件。 GitTree 是发布此博客(包括私人存储库)的 macOS、Windows 和 Linux 的 Git 客户端,读取 Git 已知的工作树,包括创建的 Claude Code 或 Codex,并在界面中为每个工作树提供一个位置。

- 左侧面板中的“工作树”部分。 每个工作树(首先是主工作树)按其分支(或分离时的文件夹)命名,在此选项卡中打开的工作树上带有复选标记。锁定、分离和丢失的工作树都会被标记。
- 分支提示上的同级工作树。 提交图在其分支提示上标记每个工作树及其保存的更改数量,这是查看哪些代理仍在编辑的快速方法。单击标记将打开该工作树的选项卡。
- 从您所在的位置创建工作树。 在命令选项板中创建工作树...或在提交上从此提交创建工作树...可以让您选择一个新分支或分离的签出,然后选择文件夹;为此分支创建工作树...在分支上检查新文件夹中的该分支。
- 每个工作树一个选项卡,有自己的终端。 在新选项卡中打开工作树就像任何存储库一样打开它,图表下的内置终端使用您自己的 shell 在该工作树的文件夹中启动,因此您可以在那里启动
claude或codex。 - 锁定、移动、删除、修剪和修复。 以可选原因锁定、移动文件夹或将其删除。 Git 拒绝删除未提交更改的工作树,并且分支会保留。 Prune Stale Worktrees 可以预览 Git 将删除的内容,而 Repair Worktree Links(从您手动移动的工作树运行)会重新连接它。
每个操作都会运行您已安装的 Git,因此结果与命令行匹配:
| 任务 | 命令行 | 在GitTree |
|---|---|---|
| 创建 | git worktree add -b <branch> <path> <start> | 创建工作树...(命令面板、提交或分支菜单) |
| 列表 | git worktree list | WORKTREES 部分和分支尖端上的标记 |
| 打开 | cd <path> | 在新选项卡中打开工作树 |
| 锁 | git worktree lock --reason "<text>" <path> | 锁定工作树...(原因可选) |
| 移动 | git worktree move <path> <new-path> | 移动工作树... |
| 删除 | git worktree remove <path> | 删除工作树... |
| 西梅 | git worktree prune | 修剪陈旧的工作树……(带预览) |
| 修复 | git worktree repair | 修复工作树链接 |
GitTree 功能页面 列出了应用程序执行的所有其他操作,Git GUI 与命令行 涵盖了每种方法何时更快。
合并多个人工智能代理的工作
由于分支是共享的,因此您的主工作树在代理提交时就会看到每个代理的分支。将每个请求视为来自队友的拉取请求:可信,但经过审查。
- 首先阅读差异。 将代理的分支与
main逐块进行比较,并查找不相关的编辑、删除的测试和新的依赖项。 - 检查重叠。 GitTree 在合并前预测冲突,在与
main冲突时在分支名称旁边发出警告,并在其他未合并的分支接触相同文件时发出提示,所有这些都在您的计算机上计算。对于多个代理分支,这表明哪个合并顺序伤害最小。 - 整理历史记录。 在该代理的工作树内使用 GUI 中的交互式变基 压缩检查点提交:Git 不会检出在另一个文件夹中检出的分支。
- 合并或打开拉取请求。 从主工作树合并,或将代理的分支拖到 GitTree 中的
main上以合并、变基或启动拉取请求。 - 退后一步。 如果两个代理更改了相同的行,请参阅如何解决 Git 合并冲突;如果合并出错,您可以撤消合并、重置或变基。
- 清理。 删除工作树,然后删除合并的分支。
git switch main
git merge --no-ff agent/auth-refactor
git worktree remove ../myapp-auth
git branch -d agent/auth-refactorGit worktree 与 AI 编码代理的陷阱
- 强制一个分支进入两个工作树。
--force可以绕过 Git 的拒绝,但代价是两个文件夹争夺一个分支。打开现有的工作树; GitTree 告诉您该分支的签出位置。 - 假设工作树隔离一切。它们隔离文件,而不是服务。在同一端口上启动开发服务器或迁移同一本地数据库的代理仍然会发生冲突,因此为每个工作树提供自己的端口和测试数据库。
- 手动删除或移动文件夹。 Git 保留每个工作树的记录。已删除文件夹的记录会一直存在,直到
git worktree prune(或者很久以后,Git 的自动清理)将其删除;git worktree repair,在您移动的文件夹内运行,重新连接它。将工作树锁定在并不总是安装的驱动器上,这样修剪就不会影响它们。 - 强制删除未经审核的工作。
git worktree remove会拒绝进行更改的工作树,除非您添加--force,因此请先阅读差异。 Claude Code 的非交互式-p运行会锁定其工作树,直到稍后的会话释放它们;自行将其移除之前先将其解锁。 - 关闭运行代理的选项卡。 在 GitTree 中,内置终端属于其存储库选项卡,关闭该选项卡会停止其终端会话,包括其中运行的代理。
- 运行的代理数量超出了您可以审查的范围。 审查是真正的瓶颈。从两个或三个并行任务开始,并在合并它们感觉很常规后添加更多任务。
在下一个任务中尝试使用工作树
Git 的工作树命令就是您启动所需的全部,并且 GUI 使多个工作树更易于查看。 GitTree 在 macOS、Windows 和 Linux 上有免费计划,涵盖所有 Git 功能,包括私有存储库,而 Nour 是 AI 助手,随 GitTree Pro 一起提供。登录后,每个 Git 功能都包含在免费计划中,并且需要 Git 2.39 或更高版本;在 Ubuntu 22.04 上,首先在 Ubuntu 上升级 Git。按照Linux安装指南或访问GitTree下载页面。
常见问题
git worktree 和 git clone 有什么区别?
克隆将整个存储库复制到具有自己的对象数据库的新文件夹中,因此其分支和提交只能通过推送和获取到达另一个克隆。工作树是同一存储库的额外文件夹:提交和分支立即共享,而每个文件夹保留自己的文件、分支和暂存区域。
两个 git 工作树可以签出相同的分支吗?
默认情况下不是。 Git 拒绝为已经在另一个工作树中签出的分支创建工作树,并且最好不要使用覆盖它的强制选项。如果每个工作树需要相同的起点,则为每个工作树和每个人工智能代理提供其自己的分支,从相同的提交创建。
Claude Code 支持 git 工作树吗?
是的。 Claude Code 的文档描述了一个 --worktree 标志(简称 -w),它在新分支上的 .claude/worktrees 下创建一个工作树,并在其中启动会话。您还可以使用 git worktree add 创建工作树,切换到其文件夹并在那里启动 Claude Code,这与 Codex 的工作方式相同。
如何安全删除 git 工作树?
使用文件夹路径运行 git worktree remove。当工作树有未提交的更改或未跟踪的文件时,Git 会拒绝,因此请先检查或提交它们,然后仅在确定时才使用强制选项。该分支被保留,因此合并后单独删除它。如果您手动删除了该文件夹, git worktree prune 会清除剩余记录。
git worktrees 共享node_modules、.env 或构建文件吗?
不会。新的工作树仅包含 Git 跟踪的文件。安装的依赖项、环境文件和构建输出保留在创建它们的文件夹中,因此每个工作树都需要自己的安装和本地配置的副本。对于它创建的工作树,Claude Code 可以通过 .worktreeinclude 文件复制选定的忽略文件。
最好的带有 GUI 的 git worktree 管理器是什么?
寻找一个列出每个工作树的客户端,显示每个工作树的分支以及它是否保存更改,并且可以在没有终端的情况下添加、锁定、移动、删除、修剪和修复工作树。 GitTree(可在 macOS、Windows 和 Linux 上使用)执行所有这些操作,并在提交图中的分支提示上标记同级工作树。
GitTree 是否会在工作树中为我启动 AI 代理?
不会。 GitTree 管理工作树并为每个工作树提供自己的选项卡,并在该工作树的文件夹中启动一个内置终端,您可以在其中自行启动 Claude Code、Codex 或其他代理。另外,当您单击“生成”时,GitTree 可以通过您自己的 Claude Code、Codex 或 Antigravity CLI 起草提交消息和拉取请求描述。
来源
有关其他产品的声明已根据其位于 2026年10月22日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。