Git Worktree
Последнее обновление
git worktree позволяет одному репозиторию иметь несколько рабочих каталогов одновременно, каждый на своей ветке. Вместо того чтобы прятать работу через stash для смены ветки, вы переключаетесь на другую ветку в отдельной папке - проверьте PR, примените хотфикс или соберите одну ветку, редактируя другую, при этом всё использует одну и ту же историю .git.
Попробуйте это в терминальном playground - настоящая оболочка в вашем браузере, ничего устанавливать не нужно.
Синтаксис
| Command | What it does |
|---|---|
git worktree add ../hotfix hotfix | Переключается на hotfix в соседней папке |
git worktree add -b new ../new | Создаёт ветку и worktree для неё |
git worktree list | Выводит список всех worktree и их веток |
git worktree remove ../hotfix | Удаляет worktree |
git worktree prune | Очищает устаревшие записи worktree |
Разбор примера
Исправьте баг в main, не трогая свою ветку с фичей.
| Step | Command | Result |
|---|---|---|
| 1 | git worktree add ../fix main | main переключена в ../fix |
| 2 | Исправьте и закоммитьте в ../fix | Хотфикс сделан в main |
| 3 | git worktree remove ../fix | Очистка; ветка с фичей осталась нетронутой |
Частые вопросы о git worktree
Что такое git worktree?
Worktree - это дополнительный рабочий каталог, привязанный к тому же репозиторию и переключённый на другую ветку или коммит. Он позволяет держать несколько веток переключёнными одновременно в отдельных папках, при этом все используют одну историю
.git - так что вам не нужно прятать изменения через stash или клонировать, чтобы работать над двумя ветками сразу.Как добавить worktree?
Выполните
git worktree add <path> <branch>, например git worktree add ../hotfix hotfix. Git переключит эту ветку в новую папку. Чтобы одновременно создать новую ветку, используйте git worktree add -b <newbranch> <path>.Когда использовать worktree вместо смены ветки?
Используйте его, когда смена ветки была бы неудобной - у вас есть незакоммиченная работа, долгая сборка, которую вы не хотите прерывать, или нужно сравнить две ветки рядом. Worktree даёт вам другую ветку в её собственной папке, не трогая текущую.
Как удалить worktree?
Выполните
git worktree remove <path>. Если папка была удалена вручную, выполните git worktree prune, чтобы очистить устаревшие записи. Нельзя удалить основной worktree (исходную папку репозитория), только те дополнительные, что вы добавили.Можно ли попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить
git worktree в настоящей оболочке в вашем браузере - ничего устанавливать не нужно. Бесплатный интерактивный курс Git от Coddy также пошагово охватывает рабочие процессы с ветками.