junior
Что такое git stash?
git stash — это команда для временного сохранения незакоммиченных изменений (staged и unstaged) в специальном стековом хранилище, чтобы переключиться на другую задачу с чистой рабочей директорией.
Аналогия из жизни: stash — это ящик стола, куда вы быстро складываете текущую работу, когда начальник просит срочно заняться другой задачей. Закончив срочное, вы достаёте свои материалы обратно из ящика.
Основные операции
Пример
# Сохранить все незакоммиченные изменения
git stash
# Сохранить с описанием
git stash push -m "WIP: рефакторинг сервиса оплаты"
# Сохранить, включая неотслеживаемые (untracked) файлы
git stash -u
git stash --include-untracked
# Сохранить только staged-изменения
git stash push --staged
Просмотр и восстановление
Пример
# Список сохранённых stash-записей
git stash list
# stash@{0}: On feature/payment: WIP: рефакторинг сервиса оплаты
# stash@{1}: WIP on main: a1b2c3d fix typo
# Показать содержимое stash
git stash show stash@{0}
git stash show -p stash@{0} # с полным diff
# Восстановить последний stash И удалить его из списка
git stash pop
# Восстановить последний stash, НО оставить в списке
git stash apply
# Восстановить конкретный stash
git stash apply stash@{1}
git stash pop stash@{1}
Удаление
Пример
# Удалить конкретный stash
git stash drop stash@{0}
# Удалить все stash-записи
git stash clear
Создание ветки из stash
Пример
# Создать новую ветку и применить stash
git stash branch feature/payment-refactor stash@{0}
# Полезно, если stash конфликтует с текущим состоянием
Типичный сценарий
Пример
# Работаете над фичей, но нужно срочно переключиться на hotfix
git stash push -m "WIP: feature/payment"
# Переключаемся и делаем hotfix
git switch main
git switch -c hotfix/critical
# ... fix, commit, push ...
# Возвращаемся к своей работе
git switch feature/payment
git stash pop
Ключевые моменты
stash pop=stash apply+stash drop— применяет и удаляет одной командой- По умолчанию
stashне сохраняет untracked-файлы — используйте-uдля их включения - Stash — это стек (LIFO).
git stash popбез указания номера берёт последний (stash@{0}) - Stash привязан к репозиторию, а не к ветке — можно сохранить в одной ветке, применить в другой
Частые ошибки
- Накапливать множество записей в stash и забывать о них — используйте описания
-m - Путать
popиapply—popудаляет stash после применения,apply— нет - Не использовать
-uи терять untracked-файлы при переключении веток - Полагаться на stash как на долговременное хранилище — лучше создать коммит
Как используется в 2026
- IDE (IntelliJ IDEA, VS Code) предоставляют графический интерфейс для управления stash
git stash push --staged(Git 2.35+) позволяет сохранить только проиндексированные изменения — удобно для частичного переключения контекста- Многие команды предпочитают WIP-коммиты вместо stash, так как коммиты можно пушить и делиться ими
- Автоматическое сохранение stash при переключении веток доступно в некоторых GUI-клиентах
На собеседовании: покажите, что знаете разницу между
pop(apply + drop) иapply(без удаления). Часто спрашивают типичный сценарий использования — срочное переключение контекста. Упомяните флаг-uдля untracked-файлов и что stash — это стек (LIFO).