Hermes Agent Git Worktrees并行开发:让每个AI实验拥有独立分支(2026最新)

维护咨询 大模型部署 问题解决 技能定制 大模型训练

站长交流微信: aixbwz

你想同时让两个Hermes Agent在同一个项目里工作,但不想互相干扰——A agent改了一个文件,B agent不知道,还继续用旧版本,最后把代码搞乱了。

这是所有多Agent开发都会遇到的问题。Hermes Agent的Git Worktrees支持,就是为了解决这个问题。

## 什么场景需要Git Worktrees

先说清楚为什么需要它。

Hermes Agent把当前工作目录当作项目根目录——你从哪个目录启动,它就在哪个目录里操作文件、读取上下文、执行工具调用。

如果两个Hermes Agent在同一个目录里工作:

第一个Agent重写了一个文件,第二个Agent正在读那个文件的旧版本。

结果:第二个Agent基于过时内容做决策,产出的代码跟新代码不兼容。

两个Agent同时写同一个文件的不同部分。

结果:后写入的把前写入的覆盖了,或者Git报冲突,两边都要手动解决。

这些问题在单人开发里不明显,在并行Agent开发里会大量出现。Git Worktrees的思路是:给每个Agent一个独立的Git分支+独立工作目录,从根本上消除文件冲突。

## Git Worktrees是什么

Git Worktrees是Git的内置功能,官方提供,不是Hermes发明的。

正常情况下,一个Git仓库在一个时间点只能检出一个分支。但Worktrees允许你同时检出多个分支到不同目录——它们共享同一个.git目录,但工作文件完全独立。

# 从主仓库创建一个新的worktree
cd /path/to/your/repo

# 创建新分支并检出到 ../repo-feature 目录
git worktree add ../repo-feature feature/hermes-experiment

这会:
– 创建一个新目录:../repo-feature
– 在这个目录里检出一个新分支:feature/hermes-experiment
– 两个目录共享同一个.git历史,但文件互不影响

## 在Hermes里使用Worktrees

方式一:手动创建Worktree

# 从主仓库创建worktree
cd /path/to/your/repo
git worktree add ../repo-feature feature/hermes-experiment

# 进入新目录
cd ../repo-feature

# 在这里启动Hermes
hermes

在这个worktree里启动的Hermes会把../repo-feature当作项目根目录,用的分支是feature/hermes-experiment。/rollback命令的checkpoint历史也会独立于主仓库。

方式二:用hermes -w自动Worktree(推荐)

手动创建worktree还要管分支名,hermes -w全自动:

cd /path/to/your/repo
hermes -w

Hermes会自动:
– 在.repo/.worktrees/目录下创建一个临时worktree
– 检出一个隔离的分支(比如hermes/hermes-abc123)
– 在这个worktree里启动完整CLI会话

不需要自己管分支名,不需要手动切目录——一条命令搞定隔离。

单次查询模式:

hermes -w -q "Fix issue #123"

这条命令会创建一个临时worktree,执行完任务后worktree保留(方便查看结果)。

## 并行跑多个Agent

这是Git Worktrees最实用的场景。

# 创建两个worktree
cd /path/to/your/repo

git worktree add ../repo-experiment-a feature/hermes-a
git worktree add ../repo-experiment-b feature/hermes-b

现在在两个终端分别启动:

# 终端1
cd ../repo-experiment-a
hermes

# 终端2
cd ../repo-experiment-b
hermes

两个Hermes进程:
– 各自在独立分支上工作(feature/hermes-a vs feature/hermes-b)
– 各自的/rollback checkpoint历史独立,不会互相干扰
– 文件完全隔离,改了A不会影响B

这在以下场景特别有价值:

场景一:批量重构。 同一个项目里同时尝试两种不同的重构方案,看哪个效果更好。

场景二:修复Bug和开发新功能并行。 Bug修复分支和新功能分支同时推进,不互相阻塞。

场景三:对比不同AI模型的代码质量。 两个worktree用不同的模型跑同样的重构任务,对比输出。

## 安全的清理流程

Worktree用完之后怎么处理?分两种情况。

情况一:想保留改动

# 正常合并分支
cd /path/to/your/repo
git merge feature/hermes-a

# 然后删除worktree
git worktree remove ../repo-experiment-a

情况二:不想要了,直接删

# 如果有未提交的改动,先确认
cd ../repo-experiment-a
git status

# 强制删除worktree(会丢弃改动)
cd /path/to/your/repo
git worktree remove ../repo-experiment-a --force

注意:git worktree remove不会自动删除分支,branch还在,可以用git branch -d feature/hermes-a单独清理。

另外,Hermes的checkpoint数据(存在~/.hermes/checkpoints/)不会自动清理worktree对应的记录,但这个数据量很小,不需要特别处理。

## 结合Checkpoint和Rollback

Git Worktrees和Hermes的/rollback机制是天然搭配。

每个worktree有独立的checkpoint历史,因为checkpoint路径跟worktree的路径哈希挂钩。这意味着:

在worktree A里做了错误的修改,可以用/rollback回退,不会影响worktree B的内容。

# 在worktree A里,错误删除了一段代码
# 回到2次操作之前的状态
/rollback 2

这个回退只在worktree A内生效,不会触发worktree B的任何变化。

## 结合Profiles系统

Git Worktrees解决的是”同一个项目里多Agent隔离”的问题。Profiles系统解决的是”不同角色、不同配置的AI互相独立”的问题。

两者可以结合使用:

# Profile "coder" + worktree分支 A
hermes -p coder -w

# Profile "reviewer" + worktree分支 B
hermes -p reviewer -w

每个Profile有独立的人格和记忆,每个Worktree有独立的文件和分支。三重隔离:Profile配置隔离 + Git分支隔离 + 文件系统隔离。

## 最佳实践

习惯一:每个实质性任务用单独的worktree。

不要在同一个worktree里同时做多件事。分支命名要描述任务:feature/hermes-checkpoints、feature/refactor-auth、bugfix/login-timeout。

习惯二:用commit做高层次的里程碑。

Hermes的/rollback是工具级安全网,Git commit是任务级里程碑。两层保护:工具改错了/rollback,任务完成就git commit。

习惯三:用hermes -w跑一次性任务更安全。

如果你只是让AI做一个单次任务,用hermes -w -q “…” 创建临时worktree,执行完临时分支保留,方便review。确认结果OK再合并,不OK直接删掉worktree分支。

# 试一下某个重构方案
hermes -w -q "重构用户认证模块"

# 效果不错,合并到主分支
cd /path/to/your/repo
git merge hermes/hermes-abc123

# 删掉临时worktree
git worktree remove .worktrees/hermes-abc123

## 常见问题

Q:worktree数量有上限吗?

A:Git本身没有硬性上限,但每个worktree会占用磁盘空间存放工作文件。太多worktree会占用较多磁盘。另外,worktree数量受限于分支数量——每个worktree对应一个分支。

Q:主仓库和worktree可以同时push/pull吗?

A:可以。它们共享同一个.git目录,push/pull操作会同时影响所有worktree的分支。

Q:worktree里的Hermes checkpoint能跨worktree使用吗?

A:不能。checkpoint路径跟worktree路径绑定,worktree删除后checkpoint历史也随之消失。所以commit仍然是长期任务历史的最终存储。

Q:hermes -w创建的worktree保存在哪?

A:默认保存在.repo/.worktrees/目录内。这样所有worktree都集中在一个地方管理,不需要到处分散。

Q:worktree里能接Telegram/Discord Bot吗?

A:能。worktree只影响工作目录和分支,Gateway进程可以正常启动。但不同worktree的Bot最好用不同的Profile+Bot Token,避免冲突。

## 相关文章

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

七天热门