Изменения в Git временно сохраняются командой git stash, которая откладывает незакоммиченные изменения в специальное хранилище и восстанавливает чистое состояние рабочей директории. Эта команда полезна, когда нужно срочно переключиться на другую ветку или получить обновления, не теряя свою работу.
Зачем это нужно
- Команда git stash позволяет отложить незавершённые изменения без создания коммита
- Необходимо использовать stash при срочном переключении на другую ветку для исправления критических багов
- Git stash помогает избежать конфликтов при слиянии веток, если вы не готовы коммитить текущие изменения
- Stash сохраняет состояние рабочей директории и индекса (staging area), полностью восстанавливая их позже
- Несколько stash'ей могут быть сохранены одновременно, каждый со своим идентификатором
- Отложенные изменения можно просмотреть, восстановить или удалить в любой момент времени
- Stash особенно полезен при работе в команде, когда нужно быстро переключиться на ветку с исправлениями
- Эта функция безопаснее, чем просто игнорировать изменения, так как они не потеряются
Пошаговая инструкция
- Отредактируйте нужные файлы в вашем проекте и сохраните их
- Откройте командную строку или терминал в директории проекта
- Проверьте статус изменений командой
git status— должны отобразиться изменённые файлы - Выполните команду
git stashдля сохранения всех изменений в хранилище stash - Git выведет сообщение о сохранении изменений и автоматически восстановит чистое состояние рабочей директории
- Если нужно добавить описание к отложенным изменениям, используйте команду
git stash save "описание вашего stash" - Для сохранения только отслеживаемых файлов (без новых файлов) используйте
git stash --keep-index - Для сохранения всех файлов, включая новые неотслеживаемые файлы, выполните
git stash -uилиgit stash --include-untracked - Просмотрите список всех сохранённых stash'ей командой
git stash list— выведется полный журнал с идентификаторами - Каждый stash отображается в формате
stash@{номер}с указанием ветки и сообщения - Теперь переключитесь на нужную ветку командой
git checkout название-веткиили создайте новую веткуgit checkout -b новая-ветка - Выполните необходимые работы на других ветках, делайте коммиты и пушьте изменения
- Для восстановления отложенных изменений вернитесь на исходную ветку командой
git checkout исходная-ветка - Восстановите последний stash'ь командой
git stash pop— это вернёт изменения и удалит их из хранилища - Если вы хотите восстановить конкретный stash, используйте
git stash pop stash@{номер}(например,git stash pop stash@{0}) - Альтернативно используйте команду
git stash apply stash@{номер}для восстановления изменений без удаления их из хранилища - При конфликтах слияния решите их вручную, отредактировав конфликтующие файлы
- После разрешения конфликтов создайте коммит с объединённых изменений
- Для удаления конкретного stash'а используйте команду
git stash drop stash@{номер} - Для удаления всех stash'ей выполните
git stash clear— это действие необратимо - Просмотрите содержимое stash'а перед восстановлением командой
git stash show stash@{номер}илиgit stash show -p stash@{номер}для подробной разницы
Часто задаваемые вопросы
Может ли git stash потерять мои изменения? Нет, изменения безопасно хранятся в Git и могут быть восстановлены в любое время; они удаляются только при выполнении команды git stash drop или git stash clear.
Как восстановить stash, если я случайно его удалил? Удалённый stash нельзя восстановить, но вы можете просмотреть историю всех операций Git командой git reflog и попытаться восстановить потерянные коммиты.
В чём разница между git stash pop и git stash apply? Команда git stash pop восстанавливает изменения и удаляет stash из хранилища, а git stash apply восстанавливает изменения, но оставляет stash в списке для повторного использования.