ГлавнаяБлогПараллельная работа с Git Worktree и Claude Code
Python

Параллельная работа с Git Worktree и Claude Code

Узнайте, как использовать Git Worktree для параллельной работы над фичами без конфликтов. Пошаговое руководство с примерами кода и советами по Claude Code.

Al
Редакция Algolitalgolit.ru
8 мин чтения1 июля 2026 г.

Зачем вам Git Worktree?

Вы когда-нибудь хотели работать над двумя фичами одновременно, не переключаясь между ветками и не пряча незавершённые изменения? Git Worktree — это инструмент, который позволяет иметь несколько независимых рабочих директорий одного репозитория. В этой статье мы разберём, как настроить параллельную работу с помощью Git Worktree и Claude Code, чтобы вы могли одновременно разрабатывать две фичи без конфликтов и лишних телодвижений.

Что такое Git Worktree?

Обычный клон даёт вам одну рабочую директорию, привязанную к одной ветке. Worktree — это вторая рабочая директория для того же репозитория, но на другой ветке. Обе папки используют общий .git (одну историю и один удалённый репозиторий), но их файлы полностью независимы. Вы можете редактировать, собирать и запускать код в одной, а другая останется нетронутой.

Эта изоляция — ключевая особенность. Claude Code может писать код для одной фичи в терминале A, пока вы чините баг в терминале B, и ни одна сессия не затрёт файлы другой. Никакого stashing, никаких случайных перезаписей.

Главное правило

Worktree принадлежит ровно одному репозиторию, и ветка может жить ровно в одном worktree одновременно. Поэтому правило простое: один worktree на одну параллельную фичу. Две фичи — два worktree — два терминала — две сессии Claude.

Наш пример: две фичи в проекте peektea

Возьмём две задачи, которые не пересекаются по коду:

  • Фича A (Issue #2): горячие клавиши y (копировать путь) и Y (копировать содержимое файла)
  • Фича B (Issue #3): перемещение файла: x вырезает, v вставляет в текущую директорию

Обе ответвляются от master. Основной checkout находится в ~/pers/peektea. Worktree будут расположены рядом.

Создание worktree: пошагово

Выполните git worktree add из любого существующего checkout репозитория. Команда создаёт папку и ветку за один раз.

Терминал A — фича копирования

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  # свежая сессия, прямо здесь

Терминал B — фича перемещения

cd ~/pers/peektea
git worktree add -b move-to-dir ~/pers/peektea-move master
cd ~/pers/peektea-move
claude  # вторая сессия, полностью независимая

Готово. Два checkout, две ветки, две сессии Claude, а ваш оригинальный ~/pers/peektea остался нетронутым.

Именование сессий Claude по имени ветки

Внутри каждой сессии выполните /rename, чтобы имя сессии совпадало с веткой. Это сэкономит вам время, когда вы вернётесь к задаче через несколько часов:

/rename copy-path-and-contents

Так как claude --resume показывает только сессии для текущей папки, вы легко найдёте нужную:

cd ~/pers/peektea-move
claude --resume  # выберите именованную сессию
# или ещё быстрее:
claude --continue  # открыть последнюю сессию в этой папке

Работа в двух checkout одновременно

Переключение между задачами — это просто переключение терминалов. Сессии не разделяют состояние, поэтому ничего не нужно согласовывать. 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 для следующей фичи, которую вы планируете делать параллельно с другой. Попробуйте поработать в двух терминалах — вы почувствуете разницу.

#git worktree#claude code#параллельная разработка#git workflow
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →