Глиф Учебники

git stash — отложить изменения

Справочник · Git · 2 минуты чтения

Отложить незаконченные правки и вернуть рабочую папку к последнему коммиту:

Терминал
$ git stash
Saved working directory and index state WIP on main: 3e677f8 Добавлен первый пункт

Теперь можно переключиться на другую ветку, исправить срочную ошибку, вернуться — и достать правки обратно:

Bash
git stash pop

pop возвращает последние отложенные правки в рабочую папку и удаляет их из списка.

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

КомандаЧто делает
git stashОтложить правки в отслеживаемых файлах
git stash -uТо же вместе с новыми, ещё не добавленными файлами
git stash push -m "Форма входа"Отложить с понятным сообщением
git stash listСписок отложенного
git stash popВернуть последнее и убрать из списка
git stash applyВернуть последнее, но оставить в списке
git stash show -pПосмотреть, что в последнем отложенном
git stash dropУдалить последнее отложенное, не применяя
Терминал
$ git stash list
stash@{0}: WIP on main: 3e677f8 Добавлен первый пункт
stash@{1}: On main: Форма входа

stash@{0} — самое свежее. С конкретной записью работают так: git stash pop stash@{1}, git stash drop stash@{1}.

В PowerShell фигурные скобки служебные — берите имя записи в кавычки: git stash pop 'stash@{1}'. В Git Bash и Linux кавычки не нужны.

Новые файлы не откладываются

Обычный git stash берёт только файлы, которые уже есть в истории. Новый файл, ещё не добавленный через git add, останется в рабочей папке. Чтобы отложить и его, используйте git stash -u.

Конфликт при pop

Если, пока правки лежали отложенными, те же строки изменились в ветке, git stash pop закончится конфликтом (CONFLICT (content)). Отложенное при этом не удаляется из списка — Git пишет The stash entry is kept in case you need it again. Решите конфликт как обычно (см. Как решить конфликт), а потом удалите запись: git stash drop.

Отложить в новую ветку

Если окажется, что отложенная работа — целая задача, создайте для неё ветку прямо из stash:

Bash
git stash branch login-form

Git создаст ветку от того коммита, на котором правки откладывали, переключится на неё и вернёт правки.

Подводные камни

git stash drop и git stash clear (очистить весь список) удаляют отложенные правки. Вернуть их можно только по хешу, который drop выводит в строке Dropped refs/stash@{0} (хеш): git stash apply хеш, — и только пока Git не убрал их при очистке репозитория.