Перейти к содержанию

Stash: Временное сохранение изменений

git stash позволяет временно сохранить изменения, не сделав коммит, и вернуться к чистой рабочей директории. Это полезно, когда нужно быстро переключиться на другую задачу или ветку.

Базовое использование

Сохранить изменения (спрятать в stash)

git stash

Эта команда: 1. Сохраняет все измененные отслеживаемые файлы в стек stash. 2. Восстанавливает файлы до состояния последнего коммита (рабочая директория становится чистой).

Примечание: По умолчанию git stash не сохраняет новые (неотслеживаемые) файлы.

Сохранить включая новые файлы

Чтобы спрятать также новые файлы, которые еще не были добавлены через git add:

git stash -u
# или явно
git stash --include-untracked

Сохранить всё (включая игнорируемые файлы)

git stash -a
# или
git stash --all

Просмотр сохраненных stash

git stash list

Вывод выглядит так:

stash@{0}: WIP on feature/login: a1b2c3d Добавить форму
stash@{1}: WIP on main: e4f5g6h Исправить баг

Применение сохраненных изменений

Применить последний stash (без удаления из списка)

git stash apply

Изменения вернутся в рабочую директорию, но запись в списке stash останется.

Применить конкретный stash

git stash apply stash@{1}

Применить и удалить из списка

git stash pop

Эквивалентно apply + drop. Удобно для быстрого возврата изменений.

Удалить stash

# Удалить последний
git stash drop

# Удалить конкретный
git stash drop stash@{1}

# Очистить весь список
git stash clear

Создание именованного stash

По умолчанию stash получает имя автоматически. Можно дать свое имя для удобства:

git stash save "Работа над авторизацией"
# или в новых версиях Git
git stash push -m "Работа над авторизацией"

Теперь в списке будет видно понятное описание.

Частые сценарии использования

Сценарий 1: Срочная задача

Вы работаете над фичей, половина кода написана, но коммит делать рано. Поступила срочная задача.

# Спрятать текущую работу
git stash save "WIP: форма логина"

# Переключиться на main и сделать срочную правку
git checkout main
git pull
# ... правки, коммит, пуш ...

# Вернуться к фиче
git checkout feature/login
git stash pop

Сценарий 2: Переключение веток без коммита

Пытаетесь переключиться, но Git ругается на незакоммиченные изменения:

git checkout other-branch
# error: Your local changes to the following files would be overwritten by checkout

# Решение:
git stash
git checkout other-branch
# ... работа ...
git checkout -
git stash pop

Работа с конфликтами

Если при stash pop возникают конфликты, Git сообщит об этом. Разрешите конфликты вручную, затем:

git add <файлы>
# Не нужно делать commit, просто продолжайте работу

Stash будет удален из списка автоматически после успешного pop, даже если были конфликты.


Назад: Revert → | Далее: Reflog →