Узнайте, как использовать Git Worktree для параллельной работы над фичами без конфликтов. Пошаговое руководство с примерами кода и советами по Claude Code.
Вы когда-нибудь хотели работать над двумя фичами одновременно, не переключаясь между ветками и не пряча незавершённые изменения? Git Worktree — это инструмент, который позволяет иметь несколько независимых рабочих директорий одного репозитория. В этой статье мы разберём, как настроить параллельную работу с помощью Git Worktree и Claude Code, чтобы вы могли одновременно разрабатывать две фичи без конфликтов и лишних телодвижений.
Обычный клон даёт вам одну рабочую директорию, привязанную к одной ветке. Worktree — это вторая рабочая директория для того же репозитория, но на другой ветке. Обе папки используют общий .git (одну историю и один удалённый репозиторий), но их файлы полностью независимы. Вы можете редактировать, собирать и запускать код в одной, а другая останется нетронутой.
Эта изоляция — ключевая особенность. Claude Code может писать код для одной фичи в терминале A, пока вы чините баг в терминале B, и ни одна сессия не затрёт файлы другой. Никакого stashing, никаких случайных перезаписей.
Worktree принадлежит ровно одному репозиторию, и ветка может жить ровно в одном worktree одновременно. Поэтому правило простое: один worktree на одну параллельную фичу. Две фичи — два worktree — два терминала — две сессии Claude.
Возьмём две задачи, которые не пересекаются по коду:
y (копировать путь) и Y (копировать содержимое файла)x вырезает, v вставляет в текущую директориюОбе ответвляются от master. Основной checkout находится в ~/pers/peektea. Worktree будут расположены рядом.
Выполните git worktree add из любого существующего checkout репозитория. Команда создаёт папку и ветку за один раз.
cd ~/pers/peektea
git fetch origin master # обновляем базу
# новая папка + новая ветка от master
git worktree add -b copy-path-and-contents ~/pers/peektea-copy master
cd ~/pers/peektea-copy
claude # свежая сессия, прямо здесьcd ~/pers/peektea
git worktree add -b move-to-dir ~/pers/peektea-move master
cd ~/pers/peektea-move
claude # вторая сессия, полностью независимаяГотово. Два checkout, две ветки, две сессии Claude, а ваш оригинальный ~/pers/peektea остался нетронутым.
Внутри каждой сессии выполните /rename, чтобы имя сессии совпадало с веткой. Это сэкономит вам время, когда вы вернётесь к задаче через несколько часов:
/rename copy-path-and-contentsТак как claude --resume показывает только сессии для текущей папки, вы легко найдёте нужную:
cd ~/pers/peektea-move
claude --resume # выберите именованную сессию
# или ещё быстрее:
claude --continue # открыть последнюю сессию в этой папкеПереключение между задачами — это просто переключение терминалов. Сессии не разделяют состояние, поэтому ничего не нужно согласовывать. git status и git diff работают как обычно. Вы можете просматривать состояние любого worktree из любого места с помощью git -C:
# внутри worktree
git status
git diff # неиндексированные
git diff --staged # индексированные
# или просмотр без смены папки:
git -C ~/pers/peektea-move statusВажное преимущество: каждый worktree — это его собственная ветка, поэтому коммит никогда не попадёт не в ту ветку. Ошибка «я закоммитил багфикс в ветку фичи» структурно невозможна.
Процедура стандартная, первый пуш просто устанавливает upstream:
cd ~/pers/peektea-copy
git add -A
git commit -m "feat: y/Y to copy path and file contents (#2)"
git push -u origin copy-path-and-contents # первый пушТак как peektea — это Go TUI (один бинарник, без сервера), вы можете собирать и запускать его прямо внутри worktree. Никаких портов, никаких конфликтов:
cd ~/pers/peektea-move
make build # собирает ./peektea в этой папке
./peektea # запускает версию с вашими изменениямиХотите горячую перезагрузку? make start пересобирает при каждом сохранении .go файла. Вы можете запустить make start в обоих worktree одновременно — никаких конфликтов портов.
Когда фича смержена, удалите worktree из другого checkout (не из той папки, которую удаляете):
cd ~/pers/peektea
git worktree list # посмотреть все worktree
git worktree remove ~/pers/peektea-move # откажется, если есть незакоммиченные изменения; добавьте --force, чтобы отбросить
git branch -d move-to-dir # -D для принудительного удаления, если не смержено
git worktree prune # очистить устаревшие метаданныеОбратите внимание: git worktree remove намеренно оставляет ветку нетронутой, чтобы вы случайно не потеряли незавершённую работу. Ветки удаляются отдельно, осознанно.
claude --worktreeУ Claude Code есть встроенная команда claude --worktree feature-x, которая создаёт worktree и сразу открывает сессию. Это удобно для быстрых экспериментов. Но для настоящих задач я предпочитаю ручной git worktree add по двум причинам:
worktree-feature-x, а не то имя, которое я хочу (например, copy-path-and-contents).origin/HEAD, а если ваш trunk — dev или develop, это неправильная база.Для одноразовых экспериментов --worktree быстрее. Для серьёзной работы — ручной подход.
| Команда | Что делает |
|---|---|
git worktree add -b <ветка> <папка> <база> | Новый worktree на новой ветке |
git worktree add <папка> <существующая-ветка> | Worktree из существующей ветки |
git worktree list | Показать все worktree и их ветки |
git -C <папка> status | Проверить статус worktree без cd |
git worktree remove <папка> | Удалить worktree (--force если грязный) |
git worktree prune | Очистить устаревшие метаданные |
/rename <имя> | Переименовать сессию Claude (= ветка) |
claude --resume / --continue | Открыть сессию в этой папке |
Worktree превращают «я могу держать в руках только одну ветку» в «у меня столько рук, сколько терминалов». В сочетании с именованными сессиями Claude Code параллельная работа перестаёт быть жонглированием и становится простым процессом: две чашки завариваются одновременно. Никаких танцев со stash, никаких коммитов не в ту ветку, никакого пролитого чая.
Что сделать прямо сейчас: откройте ваш текущий проект и создайте worktree для следующей фичи, которую вы планируете делать параллельно с другой. Попробуйте поработать в двух терминалах — вы почувствуете разницу.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →