Что такое Git stash?
Работая над веткой ten, вы внесли изменения в несколько файлов. Некоторые изменения уже занесены в индекс, но коммит ещё не создан. Необходимо переключиться на другую ветку, например, temp, сохранив текущие изменения в ветке ten. Для этого предназначен git stash. Он позволяет временно сохранить незафиксированные изменения и затем восстановить их.
Практическое применение Git stash
Переключимся на ветку temp: git checkout temp. Внесём изменения в файлы redeemed.md и bakers.tmp. Например, изменим ширину в redeemed.md на 200 пикселей и удалим атрибут target="_blank" в bakers.tmp.
Проверим статус репозитория: видим измененные файлы. Добавим bakers.tmp в индекс командой git add bakers.tmp.
Чтобы сохранить изменения в ten перед переключением на другую ветку, используем команду: git stash.
Результат: сообщение Saved working directory and index state WIP on temp: …. Видим хеш SHA-1 и описание изменений.
Git создал временный коммит, сохранив изменения, и создал к нему ссылку в файле .git/refs/stash.
Проверим файлы redeemed.md и bakers.tmp. Изменения пропали.
Файл .git/refs/stash содержит SHA-1 хеш. Получим содержимое объекта Git по этому хешу: git cat-file -p <SHA-1 хеш>. Получим объект типа commit, содержащий информацию о сохраненных изменениях, включая сообщение WIP on temp: …. Этот временный коммит хранит наши изменения.
Восстановление изменений с помощью Git stash
Переключимся на ветку temp: git checkout temp. Вернёмся к ветке ten: git checkout ten.
Чтобы восстановить сохраненные изменения, выполним команду: git stash pop.
Результат: изменения применены, файлы redeemed.md и bakers.tmp содержат внесенные ранее изменения. Файл .git/refs/stash удалён, так как stash применён.
git stash — мощный инструмент для временного сохранения незафиксированных изменений, позволяющий переключаться между ветками без потери работы. Он сохраняет изменения в виде временного коммита, обеспечивая надежное восстановление.