Главная Категории Контакты Поиск

Сохраняем временно свои изменения с помощью git stash

Как временно, локально сохранить свои изменения с помощью git stash. Полезные команды.

Git ·08.08.2019·читать 3 мин 🤓·Автор: Alex Myzgin

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

Git stash

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

git stash
Saved working directory and index state WIP on app-refactoring: 38e8211 add app footer

Если мы сейчас выполним - git status, то увидим, что ветка пустая (без изменений).

On branch app-refactoring

nothing to commit, working tree clean

Git stash save

Кроме того, когда сохраняем новые изменения, можем указать имя, чтобы запомнить, какие изменения мы делали. Для этого нужно выполнить git stash save <message> и указать имя сообщения:

git stash save 'wip: refactoring'

Git stash list

Для того чтобы посмотреть, что у нас есть в stash, нужно выполнить git stash list.

Stash - это структура стека, в которой все сообщения будут появляться один за другим: stash@{0}, stash@{1} и так далее.

Выполнив git stash list мы увидем, что у нас есть два сообщения: stash@{1} было сгенерировано автоматически, а stash@{0} - созданное нами.

stash@{0}: On app-refactoring: wip: refactoring
stash@{1}: WIP on app-refactoring: 38e8211 add app footer

Git stash pop

Чтобы забрать последние изменение из stash и удалить его после применения, нужно выполнить git stash pop.

git stash pop

Git stash apply

Также мы можем использовать apply вместо pop. В этом случае наши изменения будут применены, но также они останутся в stash.

git stash apply

Чтобы применить конкретный stash, нужно выполнить git stash apply "stash@{n}" и указать номер stash. Некоторые системы требуют указывать "stash@{n}" с двойными кавычками, а некоторые нет stash@{n}.

git stash apply stash@{0}

Git stash show

Данная команда показывает сводку различий в stash. При этом учитывает только последний stash.

git stash show

Если нужно увидеть полный diff, мы можем использовать:

git stash show -p

Аналогично с другими командами, мы можем указать идентификатор stash для получения сводки diff:

git stash show stash@{1}

Git stash branch

Эта команда создает новый stash, а затем удаляет последний stash (как stash pop).

git stash branch <name>

Если нам нужен конкретный stash, мы можем указать его идентификатор.

git stash branch <name> stash@{1}

Это будет полезно, когда мы сталкиваемся с конфликтами после того, как применили stash к последней версии своей ветки.

Git stash drop

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

git stash drop <stash_id>

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

Git stash clear

Если нужно удалить всё в stash из репозитория, выполняем:

git stash clear

Website, name & logo
Copyright © 2019. Alex Myzgin