Gymterview
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 и applypop удаляет 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).