Git 工作流指南

OpenCode Worktree 指南:用 Git 隔离并行编码任务

OpenCode worktree 是 Git 的链接工作树:每个编码任务有自己的目录和分支,同时共享仓库历史。用 Git 创建工作树,进入新目录后再启动 OpenCode。它适合需要独立文件快照和审查边界的并行任务。

三个独立的 OpenCode 任务工作区连接到同一个 Git 仓库
概念示意:每个工作树拥有独立检出目录,但共享 Git 历史。

快速结论

用 Git worktree 为 OpenCode 并行任务创建独立检出目录

链接工作树由 Git 管理;OpenCode 会在你打开的项目目录中运行。每个工作树都有自己的检出文件、索引和分支,同时共享 Git 历史与对象。只有当两个独立任务会互相覆盖同一工作区时,才值得创建工作树。它不能隔离数据库、环境服务、密钥或 Git 之外的生成文件。

OpenCode worktree 是 Git 的链接工作树:每个编码任务有自己的目录和分支,同时共享仓库历史。用 Git 创建工作树,进入新目录后再启动 OpenCode。它适合需要独立文件快照和审查边界的并行任务。

相关 OpenCode 指南: OpenCode Agents 与 AGENTS.md · OpenCode JSONC 配置 · OpenCode 权限 · OpenCode 会话存储.

1. Git 工作树会怎样影响 OpenCode

Git worktree 是连接到同一仓库的另一个工作目录。主目录可以留在 main,旁边的新目录则检出 work/auth。两个目录中的文件和当前分支各自独立;底层 Git 对象仍由仓库共享,因此通常不必为每个任务完整克隆一次仓库。

这个流程不需要 OpenCode 专用的 worktree 模式。进入新目录后启动 CLI,它就会把该目录作为项目上下文。全局 OpenCode 设置仍可能生效,但项目文件、未跟踪文件和本地环境不会自动复制到所有工作树。

2. 用三个安全步骤创建链接工作树

先检查当前目录的分支和改动。干净的起点能让你分清后续差异来自主任务还是新分支。从仓库根目录创建一个新分支,并把它检出到旁边的目录。不要把新工作树放进原仓库内部,以免目录关系变复杂。

下面的命令会在当前提交上创建 work/auth,并将工作目录放到 ../app-auth。如果分支已经存在,先确认它没有被其他工作树检出,再决定是否沿用。Git 通常不允许一个分支同时在多个链接工作树中处于检出状态。

从主仓库根目录运行。新分支从当前提交开始。

示例:创建并打开功能工作树
git status --short --branch
git worktree add -b work/auth ../app-auth
cd ../app-auth
opencode
git worktree list
git -C ../app-auth status --short --branch

3. 从正确目录启动 OpenCode

执行 cd ../app-auth 后,在这个终端中运行 opencode。当前目录就是重要边界:每个工作树使用独立终端或会话,并先确认项目根目录再让代理改文件。可以先发只读任务,例如请 OpenCode 概括当前分支并列出准备检查的文件。

给每个会话分配明确任务,并在任务记录里写清分支名。例如一个工作树处理身份验证测试,另一个只更新文档。避免让两个会话同时改同一文件、运行重叠的数据迁移,或写入同一个生成目录。分开目录能减少文件冲突,但不会自动协调多个代理。

4. 避免分支、文件和服务冲突

工作树会分开受 Git 管理的文件和索引,但它不是容器或安全边界。本地数据库、测试服务器、缓存、Docker 项目和外部账号仍可能被多个会话共享。任务需要服务时,先给它独立数据库或 schema、端口、项目名,或使用一次性环境。

Git 只会从所选提交检出受跟踪文件。.env、本地证书、缓存和构建输出等未跟踪或忽略文件,不保证会出现在新工作树里。按需重建环境,通过批准的方式加载密钥,不要把密钥提交到 Git。代理工作前后都检查 git status --short --branch

创建另一个检出前,先判断是否适合
情形工作树是否合适启动前检查
独立功能,需要单独分支适合分配负责人和清楚的文件边界。
只读检查当前差异通常不需要第二个 OpenCode 会话可以读取同一目录。
两个任务共用本地数据库或服务有条件适合先分离 schema、端口或临时服务。
两个任务会修改相同文件不适合按顺序处理,或先拆分职责。

5. 审查、合并并安全清理

把新分支作为独立改动审查。检查 git diff,在该目录运行项目检查,并确认分支只包含预期文件。测试通过后按团队流程合并或变基。链接工作树不能替代代码审查;提交尚未共享前,一个目录的改动也不会自动出现在另一个目录。

删除前检查有没有未提交改动,再决定提交、暂存还是保留。git worktree remove ../app-auth 会移除干净的链接检出;存在改动时 Git 会拒绝,除非使用强制选项。不要把强制删除当作日常清理。若你从 Git 外部删了目录,可运行 git worktree prune 清理陈旧登记;它不会删除仍有效的工作目录。

功能分支工作树经过测试并合并回主分支,未完成分支继续保持独立
只有审查并妥善保留改动后,才移除对应的链接工作目录。

6. 何时用工作树,何时开新会话

任务需要不同分支、独立文件快照,或需要保留数小时甚至数天的审查边界时,使用工作树。只读调查或必须查看当前未提交文件的任务,适合在同一检出目录中新开会话。若任务严格串行且只有一个目录要工作,普通分支切换通常更简单。

工作树也增加了分支命名、依赖安装、服务隔离、测试、合并和清理等步骤。如果两个代理必须修改同一批文件,拆成工作树可能让最终合并更难。应先把任务分成互不覆盖的改动,或改为顺序执行。

7. 限制与常见故障排查

如果 git worktree add 提示分支已经被检出,先查看 git worktree list,然后创建新分支或回到已有工作树。如果 OpenCode 显示的文件不符合预期,先确认终端路径和项目根目录。如果命令找不到本地文件,记住忽略和未跟踪文件不属于 Git 检出内容。

如果多个会话的测试互相干扰,要检查 Git 以外的资源:数据库、端口、临时目录、代码生成器和共享缓存都可能冲突。若移除失败,在对应工作树运行 git status,先保存有价值的改动。保留主目录用于集成,并用工作树列表查看所有登记目录。

OpenCode worktree 常见问题

如何在 OpenCode 中使用 Git worktree?

在仓库中运行 git worktree add -b 分支名 ../目录名,进入新目录后启动 opencode。允许写文件前先核对目录和分支。

OpenCode 有内置 worktree 命令吗?

本指南使用 Git 自带的 worktree 命令。OpenCode 可以从新项目目录启动;这里的工作流不需要专用 worktree 参数。

两个 OpenCode 会话能在两个工作树里使用同一分支吗?

Git 通常会阻止一个分支同时在多个链接工作树中检出。独立改动请创建新分支,或回到已存在的工作树。

本地环境文件会复制到新工作树吗?

Git 会检出受跟踪文件。.env 等忽略或未跟踪文件不保证存在;应有意识地设置环境,并避免把密钥提交到 Git。

怎样安全移除 Git worktree?

先检查状态并保存或提交改动,再运行 git worktree remove path。从 Git 外删除目录后,可用 git worktree prune 清除陈旧登记。

官方资料

已于 2026 年 9 月 23 日核对 Git 和 OpenCode 文档。工作树生命周期命令属于 Git 行为;具体选项请按已安装的 Git 版本复核。

相关 OpenCode 指南: OpenCode Agents 与 AGENTS.md · OpenCode JSONC 配置 · OpenCode 权限 · OpenCode 会话存储.