Worktree - додатковий робочий каталог, прив'язаний до того самого репозиторію. Кожен worktree має свою гілку й свої файли, а історія, об'єкти й налаштування спільні.
git worktree add ../app-hotfix hotfix/invoice-rounding
git worktree add -b review/pr-412 ../app-review origin/feature/export
git worktree list
git worktree remove ../app-hotfix
Сценарій: ви посеред великої задачі з десятком змінених файлів, і терміново потрібно виправити баг у продакшені.
- через
stash: сховати зміни, перемкнутися, виправити, повернутися, дістати зі stash. Каталогvendor/іnode_modules/можуть не відповідати гілці, запущенийnpm run devперезбирає не той код, IDE переіндексовує проєкт; - через worktree: відкрити окремий каталог з гілкою виправлення. Основна робота лишається недоторканою, можна навіть паралельно запустити тести в обох каталогах.
Коли worktree зручний:
- термінові виправлення без переривання поточної роботи;
- рев'ю pull request - перевірити чужу гілку локально, не чіпаючи свою;
- порівняння поведінки двох версій поруч;
- довгі операції (повний прогін тестів, збирання) в одній гілці, поки працюєте в іншій;
- паралельна робота кількох агентів чи скриптів над різними гілками одного репозиторію.
Обмеження:
- одна гілка - один worktree: не можна перемкнутися на гілку, вже відкриту в іншому worktree (Git захищає від двох незалежних змін однієї гілки);
- ігноровані файли не спільні:
vendor/,node_modules/,.envу новому каталозі відсутні - їх доведеться встановити чи скопіювати; - для Laravel: окремий каталог означає окремий
.env; якщо обидва worktree використовують ту саму базу, міграції однієї гілки зачеплять іншу; - видаляйте worktree через
git worktree remove, а неrm -rf- інакше лишаються записи (git worktree pruneїх прибирає).
Порівняно з другим клоном worktree не дублює історію (економить місце й час) і бачить локальні гілки й коміти основного репозиторію без fetch.