git stash: временно отложить изменения
Спасательный приём, когда нужно срочно переключиться, а коммитить недоделанное не хочется.
git stash прячет незакоммиченные изменения в отдельное хранилище и возвращает рабочую директорию к чистому состоянию последнего коммита.
Зачем нужен stash
Знакомая ситуация: вы на середине задачи, код ещё сырой, и тут прилетает срочный баг, который надо чинить в другой ветке. Коммитить полуготовое не хочется. Git не даст переключить ветку с незакоммиченными изменениями, если они мешают. Решение — git stash: он отложит ваши правки в сторону, очистит рабочую директорию, а позже вернёт всё обратно.
Базовое использование
git stashВывод:
Saved working directory and index state WIP on main: a1b2c3d Добавить профиль
Теперь рабочая директория чистая — можно спокойно переключаться и чинить баг. Чтобы дать заначке понятное имя, добавьте сообщение:
git stash push -m "Половина формы регистрации"Возвращаем изменения
Когда вы готовы продолжить, верните отложенное:
git stash poppop применяет последнюю заначку и удаляет её из хранилища. Если хотите применить, но оставить заначку на месте, используйте apply:
git stash applyУправление заначками
Заначек может быть несколько — это стек. Полезные команды:
git stash list | показать все заначки |
git stash pop | применить последнюю и удалить |
git stash apply stash@{1} | применить конкретную |
git stash drop stash@{0} | удалить конкретную |
git stash clear | удалить все заначки |
Вывод команды git stash list:
stash@{0}: On main: Половина формы регистрации
stash@{1}: WIP on main: a1b2c3d Добавить профильТонкость с новыми файлами
По умолчанию git stash прячет только отслеживаемые файлы. Чтобы убрать и новые (untracked) тоже, добавьте флаг:
git stash -uКогда stash, а когда коммит
Stash удобен для коротких переключений: отложил, быстро сделал срочное дело, вернул обратно. Но не превращайте его в свалку: заначки легко забыть, они не привязаны к ветке и со временем теряются из виду. Если работа затягивается, лучше сделать честный коммит (пусть и с пометкой «WIP» — work in progress) в своей ветке — он надёжнее и нагляднее. Правило простое: stash — на минуты, коммит — на всё остальное.
Применение заначки на другой ветке
Приятная особенность: заначку можно применить не только там, где её сделали. Спрятали изменения на одной ветке, поняли, что им место на другой, переключились и сделали git stash pop — изменения «переедут» туда. Это спасает, когда вы случайно начали писать код не в той ветке.
Итог
git stashпрячет незакоммиченные изменения, очищая рабочую директорию.git stash popвозвращает и удаляет заначку,apply— возвращает, но оставляет.- Флаг
-uпрячет в том числе новые (untracked) файлы.