Git worktree: как открыть вторую ветку и сохранить незавершённую работу в первой

Git worktree: как открыть вторую ветку и сохранить незавершённую работу в первой
Содержание статьи

git worktree позволяет открыть другую ветку в отдельной рабочей папке того же репозитория. Незавершённые изменения текущей папки остаются на месте. На Mentoring.digital разберём сценарий срочного исправления без обязательного stash или временного коммита.

Когда отдельная папка удобнее переключения

Вы работаете над функцией, а для проверки ошибки нужна другая ветка. Простое переключение может конфликтовать с незавершёнными правками. Связанный worktree даёт второй набор файлов и собственный индекс, поэтому можно сравнивать две версии, не перестраивая исходную папку.

Это не полная независимая копия. Объекты и большая часть ссылок репозитория общие. Создание ветки или коммита остаётся действием в той же общей истории. Отдельные зависимости, сборки и настройки приложения тоже придётся учитывать: Git не создаёт отдельную базу данных или окружение сервиса.

Создание второй рабочей папки

git status --short
git branch --list
git worktree list

git worktree add -b fix-login ../project-fix HEAD
git -C ../project-fix status --short
git worktree list

В учебном примере fix-login является новой веткой, а ../project-fix новой папкой. Команда начинает её от текущего HEAD. Если исправление должно опираться на другую ветку, сначала проверьте нужную ссылку и явно укажите её вместо HEAD.

Перед выполнением убедитесь, что выбранные имя ветки и путь свободны. Не заменяйте конфликт параметром принуждения без понимания, почему Git отказался выполнять действие. Отказ помогает обнаружить чужую рабочую папку или уже используемую ветку.

Как не перепутать две папки

Перед правками выполняйте git status в нужной директории. Форма git -C путь ... удобна для явного указания места операции. В редакторе полезно открыть второй worktree отдельным окном с понятным названием.

Файлы первой папки не переносятся автоматически во вторую. Поэтому воспроизводимый пример ошибки и необходимые локальные настройки нужно подготовить отдельно. Не копируйте секреты и большие рабочие каталоги по привычке: сначала выясните, что требуется именно тестовому запуску.

Одна ветка и несколько рабочих папок

По умолчанию Git не позволяет одновременно открыть одну ветку в нескольких worktree. Для параллельной работы используйте разные ветки. Иначе независимое редактирование двух наборов файлов вокруг одной меняющейся ссылки легко приводит к путанице.

После исправления перенос результата в основную ветку является отдельным действием. Само создание worktree ничего не сливает и не отправляет на сервер. Сначала прочитайте diff и выполните нужные проверки, затем выбирайте принятый в проекте способ переноса коммитов.

Как завершить работу

git -C ../project-fix status --short
git worktree remove ../project-fix
git worktree list

Удаление штатной командой предназначено для завершённой чистой рабочей папки. Если Git сообщает о незавершённых изменениях, сначала сохраните или разберите их, а не добавляйте --force. Ветка после удаления worktree остаётся в репозитории.

Для первого знакомства используйте небольшой учебный репозиторий. Если нужно выстроить такой процесс в команде, можно обсудить его с наставником по Git. Не удаляйте рабочую папку другого человека только потому, что она появилась в общем списке.

Похожие статьи по данной теме