Тур по Git
История и отмена изменений / Урок 3.4

git stash — Временное сохранение работы

Команда git stash сохраняет ваши незафиксированные изменения и восстанавливает чистую рабочую директорию. Это как положить работу на полку, чтобы вернуться к ней позже.

Когда использовать stash

  • Вам нужно переключить ветку, но есть незафиксированные изменения
  • Вы хотите подтянуть обновления, но у вас есть локальные изменения
  • Вы хотите быстро протестировать что-то в чистом состоянии

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

  • git stash — Сохранить изменения и очистить рабочую директорию
  • git stash pop — Восстановить последний stash и удалить его
  • git stash list — Показать все сохранённые записи
  • git stash drop — Удалить последний stash без применения

Как это работает

Рабочая дир. (грязная)  →  git stash  →  Рабочая дир. (чистая)
                                               ↓
                                         Стек stash
                                        [stash@{0}]
                                        [stash@{1}]
                                        [stash@{2}]

Записи stash хранятся в стеке — последним пришёл, первым вышел.

Попробуйте!

Попрактикуйтесь в сохранении и восстановлении:

  1. Создайте и закоммитьте файл: echo "base" > work.txt && git add work.txt && git commit -m "Add work"
  2. Внесите изменения: echo "in progress" > work.txt
  3. Сохраните изменения в stash: git stash
  4. Проверьте чистое состояние: cat work.txt — снова показывает "base"
  5. Восстановите stash: git stash pop
  6. Проверьте восстановление: cat work.txt — снова показывает "in progress"

Несколько записей stash

Вы можете выполнять stash несколько раз. Каждый новый stash помещается на вершину стека:

git stash         # сохраняет текущую работу как stash@{0}
git stash         # сохраняет ещё работу как stash@{0}, предыдущий становится stash@{1}
git stash list    # показывает все записи
git stash pop     # восстанавливает stash@{0}
🎯

Цель

Сохраните изменения в stash, проверьте чистое состояние, затем восстановите с помощью stash pop

Terminal
$

No commits yet. Run `git init` and create your first commit.