Что такое git stash и для чего он используется?

«Что такое git stash и для чего он используется?» — вопрос из категории DevOps, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

git stash — это команда Git для временного сохранения незакоммиченных изменений из рабочей директории и индекса (staging area), позволяющая "очистить" состояние проекта для других операций (переключения ветки, обновления кода), с возможностью последующего восстановления этих правок.

Основные команды:

# Сохранить все отслеживаемые и проиндексированные изменения в stash.
# Сообщение "WIP: ..." помогает позже идентифицировать stash.
git stash save "WIP: работа над кнопкой"

# Сохранить ВСЕ изменения, включая неотслеживаемые (untracked) файлы
git stash save -u "Включая новые файлы"

# Показать список всех сохранённых stash'ей
git stash list
# stash@{0}: On feature/login: WIP: работа над кнопкой

# Применить последний stash и УДАЛИТЬ его из списка
git stash pop

# Применить конкретный stash (например, stash@{2}) и удалить его
git stash pop stash@{2}

# Применить stash, но НЕ удалять его из списка
git stash apply stash@{1}

# Удалить конкретный stash
git stash drop stash@{0}

# Очистить все stash'и
git stash clear

Типичные сценарии использования:

  1. Срочное переключение ветки: У вас есть незавершённые правки, но нужно переключиться на main, чтобы срочно пофиксить баг.
  2. Чистый pull/merge: Чтобы получить свежие изменения из удалённого репозитория без конфликтов с вашими правками.
  3. Сохранение эксперимента: Сохранить код, который вы пока не готовы коммитить, но хотите отложить.