git stash — отложить изменения
Отложить незаконченные правки и вернуть рабочую папку к последнему коммиту:
$ git stash
Saved working directory and index state WIP on main: 3e677f8 Добавлен первый пунктТеперь можно переключиться на другую ветку, исправить срочную ошибку, вернуться — и достать правки обратно:
git stash poppop возвращает последние отложенные правки в рабочую папку и удаляет их из списка.
Основные команды
| Команда | Что делает |
|---|---|
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:
git stash branch login-formGit создаст ветку от того коммита, на котором правки откладывали, переключится на неё и вернёт правки.
Подводные камни
git stash drop и git stash clear (очистить весь список) удаляют отложенные правки. Вернуть их можно только по хешу, который drop выводит в строке Dropped refs/stash@{0} (хеш): git stash apply хеш, — и только пока Git не убрал их при очистке репозитория.
- Stash — для коротких перерывов. Отложенное легко забыть: через неделю уже не вспомнить, что лежит в
stash@{3}. Для долгой работы надёжнее ветка и обычный коммит. - Отложенные правки хранятся только у вас —
git pushих не отправляет. - Отложить можно и один файл:
git stash push -m "сообщение" -- config.ini.