


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. Не удаляйте рабочую папку другого человека только потому, что она появилась в общем списке.