Git Worktree: Одновременная работа с несколькими ветками
Автор: Javohir Abdullayev · · Программирование

Устали от ограничений Git Checkout и Stash?
Представьте ситуацию: вы работаете над сложной функциональностью (feature). Изменены десятки файлов, переустановлены пакеты фронтенда, а сервер уже запущен. В этот момент клиент или тимлид сообщает о критической ошибке (hotfix), которую нужно исправить немедленно.
Что обычно делают разработчики? Выполняют git stash, переключаются на ветку main, пишут hotfix, коммитят изменения и возвращаются обратно через git stash pop. Но в этом процессе нередко возникают конфликты, ломаются файлы сборки или приходится заново переустанавливать пакеты node_modules / venv. Это отнимает драгоценное время и концентрацию.
Для полного решения этой проблемы в Git есть очень мощный, но часто недооцененный инструмент — Git Worktree.
Что такое Git Worktree и как это работает?
В обычном Git-репозитории у вас есть только один рабочий каталог (working directory), и с помощью git checkout или git switch вы можете просматривать только одну ветку за раз. Git Worktree позволяет на основе единой истории проекта (папки .git) открывать на диске несколько независимых рабочих директорий одновременно.
Это означает, что вам не нужно клонировать проект заново через git clone и тратить лишнее дисковое пространство: вы можете одновременно открыть 3–4 разные ветки в отдельных папках и работать в каждой из них независимо.
В каких случаях Git Worktree ускоряет работу?
- Срочные хотфиксы: Не прерывая текущую работу над кодом, вы за 10 секунд открываете ветку
hotfixв отдельной директории и устраняете проблему. - Code Review и проверка PR: Чтобы проверить код коллеги, не нужно откладывать свои незавершенные задачи. Открываете отдельный worktree для PR и сразу запускаете проект.
- Длительные сборки и тесты: Пока в одной ветке выполняются тесты или сборка Docker, во втором worktree вы продолжаете работу над другой задачей.
- Сравнение версий: Можно открыть две разные версии или архитектурные реализации рядом и наглядно сравнить их работу.
Практическое руководство: Основные команды
Работать с Git Worktree предельно просто. Давайте рассмотрим самые важные команды.
1. Добавление нового Worktree
Создание новой директории на основе существующей ветки:
git worktree add ../loyiha-hotfix hotfix-branchЕсли вы хотите создать новую ветку и сразу привязать ее к новой директории:
git worktree add -b yangi-feature ../loyiha-feature mainЭта команда создаст папку loyiha-feature уровнем выше основного репозитория и свяжет с ней ветку yangi-feature.
2. Просмотр всех активных Worktree
Чтобы узнать, какие папки и к каким веткам сейчас подключены:
git worktree listКоманда выведет список всех путей к директориям и текущие указатели коммитов HEAD.
3. Удаление Worktree после завершения работы
После успешной отправки хотфикса временную папку можно безопасно удалить:
git worktree remove ../loyiha-hotfixЕсли вы удалили папку вручную через файловую систему, выполните следующую команду для очистки внутренних данных Git:
git worktree pruneОптимальная структура проекта: Подход с Bare Repository
Опытные разработчики при работе с Git Worktree используют подход с bare-репозиторием. Это помогает изначально выстроить четкую структуру проекта:
- Клонируйте проект в режиме bare:
git clone --bare git@github.com:user/loyiha.git .bare - Создайте файл
.gitв корневой папке и укажите в нем путь к bare-репозиторию. - Затем создавайте отдельные worktree под каждую задачу:
main,feature/login,hotfix/payme-error.
В результате вы получаете чистое, независимое и изолированное окружение для каждой задачи. Их можно параллельно открывать в отдельных окнах IDE (например, VS Code или PyCharm) и комфортно работать.
Заключение
Git Worktree — один из самых удобных инструментов для повышения ежедневной продуктивности разработчика. Он избавляет от путаницы при переключении контекста (context switching) и ненужных конфликтов при git stash. Попробуйте эти команды в своих проектах уже сегодня и оцените заметный прирост скорости разработки.
Теги: #Git #Dasturlash #Samaradorlik #DevOps #Workflow