git stash
git stash: спрятать изменения из рабочей директории во временное хранилище (англ. stash — тайник), возвращая её в чистое состояние (к состоянию последнего коммита).
При запуске git stash Git берёт правки в отслеживаемых файлах (включая всё добавленное в область подготовки) и помещает их во временное хранилище. После этого рабочие файлы восстанавливаются до состояния последнего коммита.
Это полезно, когда нужно сделать паузу в работе — например, чтобы переключиться на другую ветку, подтянуть новые обновления или попробовать что-то рискованное, — не теряя при этом прогресс. По умолчанию Git не трогает неотслеживаемые файлы, но при желании их можно включить в сохранение.
Стэш (англ. stash) работает как колода карт. Можно добавлять (англ. push) новые изменения наверх колоды и извлекать (англ. pop) их, когда они снова понадобятся. Чаще всего для создания нового стэша используется git stash (что равноценно git stash push), а для его возврата — git stash pop, что заодно удаляет эту запись из списка.
Каждый стэш получает идентификатор вроде stash@{0}, где 0 — самая свежая запись. Сохранённые изменения можно просматривать, применять, изучать, удалять по одному или очищать целиком в любой момент.
Примеры
Временно застэшить текущие изменения и очистить рабочую директорию:
git stashТо же самое, что и:
git stash pushПрименить самый свежий стэш и удалить его из списка:
git stash popДобавить понятное сообщение к стэшу, чтобы его было проще найти позже:
git stash push -m "WIP: responsive header"Включить неотслеживаемые файлы в стэш:
git stash push -uПосмотреть список стэшей и изучить изменения (англ. diff) конкретной записи:
git stash listgit stash show -p stash@{0}
Применить стэш без его удаления, восстановив изменения и в рабочем дереве, и в области подготовки:
git stash apply --index stash@{1}Это пригодится, если нужно применить эти правки в нескольких ветках или оставить их на будущее.
Удалить конкретную запись из стэша:
git stash drop stash@{0}Очистить все стэши, когда они больше не нужны:
git stash clear.gitignoregit checkoutgit configgit taggit worktree