Параллельная разработка через git worktree — самый чистый способ вести несколько задач в одном репозитории и не смешивать их. С AI-агентами это ещё важнее: если два агента работают в одной папке, один затирает изменения другого, тесты идут по недописанному коду, и никто не понимает, какое изменение чьё.
В этой статье разберём, что такое git worktree, как использовать их с агентами и как сделать каждый ход агента обратимым.
Что такое git worktree?
Git worktree открывает другую ветку того же репозитория в отдельной папке и одновременно с остальными. У каждой папки свои рабочие файлы, но данные .git общие. Коммит, сделанный в одном worktree, сразу виден из других.
Сравнение с клоном:
| Worktree | Отдельный клон | |
|---|---|---|
| Место на диске | Мало (история общая) | Весь репозиторий |
| Видимость коммитов | Мгновенная | Нужны fetch/push |
| Одна ветка в двух местах | Запрещено (безопасно) | Возможно (риск путаницы) |
| Настройка | Одна команда | Клонировать и настроить |
Основные команды
Создать worktree на новой ветке:
git worktree add ../acme-web-auth -b auth-refactor
Открыть worktree из существующей ветки:
git worktree add ../acme-web-billing billing-v2
Показать и удалить worktree:
git worktree list
git worktree remove ../acme-web-auth
git worktree prune
prune очищает записи о worktree, папки которых удалили вручную.
Параллельная разработка через git worktree: одно дерево на агента
Правило для параллельных агентов простое: дайте каждому агенту, у которого есть риск конфликтов, собственный worktree.
Пример раскладки:
| Агент | Задача | Worktree | Ветка |
|---|---|---|---|
| Architect (Claude Code) | Перестройка авторизации | ../acme-web-auth | auth-refactor |
| Frontend (Gemini CLI) | Страница настроек | ../acme-web-settings | settings-ui |
| Tester (Codex) | Тесты авторизации | ../acme-web-auth | auth-refactor |
Tester использует worktree Architect, потому что тестирует его изменение и работает только в tests/. Frontend-агент занят совсем другим, в своей ветке.
Что это даёт:
- Агенты не видят чужие недописанные файлы.
- Каждая задача вливается через собственную ветку и pull request.
- Отказаться от задачи так же просто, как удалить её ветку.
Управление worktree в AgentVera
Worktree можно вести из командной строки, но по мере роста числа агентов уследить за ними трудно. В AgentVera вкладка Worktrees в правой панели позволяет:
- Создать worktree из новой или существующей ветки.
- Видеть для каждого worktree число изменений, насколько он впереди или позади основной ветки и его последний коммит.
- Запустить агента сразу в worktree.
- Заблокировать, очистить (prune) и принудительно удалить worktree, а также удалить его ветку.
При создании нового агента worktree можно выбрать как его рабочее пространство, а в панели агента ветка показывается небольшим тегом. Markdown-файлы, которые агенты меняют в worktree, отображаются в панели Specs как планы и документы.
Каждый ход можно отменить
Worktree разделяют агентов между собой. Но что, если агент пошёл не туда внутри своего worktree?
Традиционный ответ — коммитить почаще, но коммит на каждый шаг агента засоряет историю. Ходы в AgentVera идут другим путём:
- В начале каждого хода снимок рабочей папки сохраняется в скрытую git-ссылку.
- Ваша ветка, индекс и stash остаются нетронутыми.
- На каждого агента хранятся последние 60 ходов.
- В Turns в меню Options панели агента вы видите файлы, изменённые ходом.
- Undo this turn откатывает изменения этого хода, и отмену тоже можно отменить.
Так агенту можно свободно пробовать разное: если результат не нравится, предыдущее состояние всего в одном клике.
Перед слиянием
Прежде чем вливать готовую работу из параллельных веток в основную:
- Запустите тесты в каждом worktree.
- Просмотрите диффы; автоматическое код-ревью ускоряет это.
- Приведите в порядок сообщения коммитов. Панель Git в AgentVera умеет по staged-диффу написать сообщение в стиле вашего репозитория с помощью Claude Haiku.
- Отправьте ветку и откройте pull request; карточка GitHub в панели Git показывает pull request текущей ветки или открывает новый.
Частые ошибки
- Одна ветка в двух worktree. Git этого не позволит, и это защита.
- Записи об удалённых папках. Очищайте их командой
git worktree prune. - Забытые node_modules. В каждом worktree нужно установить свои зависимости.
- Ходы агента вместо коммитов. Ходы нужны для отмены; для долговременной истории всё равно делайте коммиты.
Пример дня: три агента, две ветки
Разберём на примере рабочего дня.
Утро: настройка
В основной папке выбрана main. Есть две задачи: перестройка авторизации и страница настроек. Вы открываете два worktree:
git worktree add ../acme-web-auth -b auth-refactor
git worktree add ../acme-web-settings -b settings-ui
Установите зависимости в каждом:
cd ../acme-web-auth && pnpm install
cd ../acme-web-settings && pnpm install
Architect и Tester стартуют в worktree auth-refactor, а frontend-агент — в settings-ui.
День: ход пошёл не так
Правя страницу настроек, frontend-агент заодно меняет стили общего компонента. Это вне задачи. В списке Turns вы видите файлы, изменённые последним ходом, отменяете ход и просите агента не трогать общий компонент. История ветки остаётся чистой: отмена — не коммит, а возврат к снимку в скрытой ссылке.
Вечер: слияние
Когда работа над авторизацией закончена, вы запускаете тесты, проверяете ревью и отправляете ветку. Если страница настроек не готова, её worktree остаётся открытым, и завтра агент продолжит в той же папке. Когда вы закрываете и снова открываете приложение, AgentVera возвращает агентов Claude и Codex в тот же разговор из истории CLI.
На что смотреть в окружении worktree
Чаще всего при параллельных worktree мешает окружение, а не код:
- Конфликты портов: если вы запускаете dev-сервер в двух worktree одновременно, не давайте обоим один и тот же порт. Задайте разные порты через переменные окружения.
- Env-файлы: файлы вне git, такие как
.env, сами в новом worktree не появятся; скопируйте их. - База данных: если в двух ветках разные миграции, общая локальная база может создать проблемы.
Панель Ports в AgentVera показывает прослушиваемые порты и какой агент запустил каждый, так что видно, какой worktree открыл какой сервер.
Копирование агента и ответвление разговора
Иногда хочется попробовать одну задачу двумя способами. Когда вы копируете агента в AgentVera, его инструмент, аккаунт, модель, effort, роль, группа и worktree копируются точно, а историю разговора можно ещё и ответвить (--fork-session для Claude, fork для Codex).
Вместе с worktree это даёт сильную схему экспериментов: запустите двух агентов, ответвлённых от одного разговора, в двух worktree, сравните результаты и влейте понравившуюся ветку. Удалив другую ветку, вы уберёте эксперимент без следа.
Чек-лист
- У каждого агента с риском конфликтов есть свой worktree?
- Зависимости установлены в каждом worktree?
- В ролях агентов указано, в каких папках они работают?
- Перед слиянием прошли тесты и ревью?
Подведём итог
Параллельная разработка через git worktree физически разводит агентов, а ходы делают обратимыми собственные изменения каждого агента. Вместе это основа безопасной работы с несколькими агентами.
AgentVera собирает worktree, ходы и панель Git в одном окне. Читайте вместе со статьёй о параллельных агентах для кода или начните с бесплатного плана.