Git worktree: как работать над двумя ветками сразу
Откройте вторую ветку в соседней папке и проверьте, что незавершённые изменения остались на месте.
git worktree позволяет открыть ещё одну ветку того же репозитория в соседнем каталоге. У каждой папки свои рабочие файлы и индекс. История и ветки общие, поэтому не нужно повторно клонировать проект.
Создайте отдельную копию для исправления
Допустим, в текущей папке идёт большая переработка, а вам нужно быстро исправить ошибку в основной ветке. Сначала получите удалённые изменения, затем создайте новую ветку от origin/main:
git status --short
git fetch origin
git worktree add -b fix/header ../header-fix origin/main
git -C ../header-fix status --short --branchРаботайте в ../header-fix. Команды, запущенные в исходной папке, по-прежнему видят её ветку и незакоммиченные изменения. Если проект использует локальную конфигурацию, установите зависимости в новой папке и настройте отдельный порт сервера разработки.
Проверьте конкретный коммит
Для разовой диагностики можно открыть известный коммит без создания ветки:
git worktree add --detach ../release-check 1234abcПодставьте реальный SHA. Если в процессе появятся изменения, которые хочется сохранить, создайте в этой папке ветку командой git switch -c fix/from-release до удаления рабочего дерева.
Закройте папку после работы
В исходном каталоге выполните git worktree list. Проверьте статус исправления и убедитесь, что нужный коммит сохранён. Затем удалите рабочее дерево штатной командой:
git -C ../header-fix status --short
git worktree remove ../header-fix
git worktree listВетка при этом останется. Если Git сообщает, что каталог содержит изменения или файлы, сначала разберитесь, нужны ли они. Справка: git worktree.
Частые вопросы
Можно ли открыть одну ветку в двух папках?
По умолчанию Git блокирует повторное открытие занятой ветки. Для параллельной работы создайте вторую ветку от того же коммита.
Почему новая папка не видит локальный .env?
Неотслеживаемые файлы не копируются. Подготовьте настройки для второй папки отдельно и следите, чтобы локальные процессы не меняли одну рабочую базу.