Команды Git

git worktree

git worktree: управлять несколькими рабочими деревьями, привязанными к одному репозиторию.

Команда git worktree позволяет развернуть один и тот же Git-репозиторий сразу в нескольких директориях. У каждого такого рабочего дерева есть свои файлы, свой указатель HEAD и своя рабочая директория. Это значит, что можно держать открытыми разные ветки параллельно, не переключаясь туда-сюда в одной папке.

Все рабочие деревья принадлежат одному репозиторию. Они делят общую базу данных объектов Git и большую часть метаданных. Благодаря этому рабочее дерево получается намного «легче», чем полный клон репозитория — отличный вариант, чтобы заглянуть в другую ветку, исправить срочную ошибку или по-быстрому провести эксперимент изолированно от текущих файлов.

Частый сценарий использования — дать ИИ-агенту работать над задачей параллельно с тобой. ИИ работает в своей ветке, развёрнутой в отдельной директории. Так он ничего не сломает в твоём основном рабочем дереве, где можно продолжать писать код вручную. По сути, создание рабочего дерева похоже на клонирование репозитория в другую папку, но работает немного быстрее.

Git worktree или полный клон в отдельной папке

Плюсы рабочих деревьев

  • Быстрее создаются, так как не нужно копировать все данные репозитория.
  • Занимают меньше места на диске, потому что рабочие деревья на одном компьютере используют общие данные репозитория.
  • Многие инструменты разработки теперь поддерживают рабочие деревья, особенно для работы с ИИ-агентами.

Минусы рабочих деревьев

  • Обычно одну и ту же ветку нельзя развернуть в двух рабочих деревьях одновременно.
  • Изменение настроек репозитория или загрузка данных (fetch) затрагивает все привязанные рабочие деревья.
  • Если нужна полностью независимая песочница с отдельными удалёнными репозиториями (англ. remotes) или настройками, лучше сделать полный клон.

Примеры

Создать новое рабочее дерево для существующей ветки release:

git worktree add ../project-release release

Создать новое рабочее дерево и новую ветку hotfix/login, начав её от main:

git worktree add -b hotfix/login ../project-hotfix main

Показать список всех рабочих деревьев, привязанных к текущему репозиторию:

git worktree list

Удалить больше не нужное рабочее дерево:

git worktree remove ../project-hotfix