- Git stash
- Git stash save
- Git stash list
- Git stash pop
- Git stash apply
- Git stash show
- Git stash branch
- Git stash drop
- Git stash clear
Часто бывает так, что когда работаешь в какой-то ветке и есть много незавершенных задач, вдруг возникла неотложная задача и нужно перейти на другую ветку. Чтобы сохранить свои изменения (а потом, когда нужно, вернуть их) мы можем использовать git stash.
Git stash
Для того, чтобы сохранить изменения, нужно в рабочей директории выполнить git stash.
git stashSaved working directory and index state WIP on app-refactoring: 38e8211 add app footerЕсли мы сейчас выполним - git status, то увидим, что ветка пустая (без изменений).
On branch app-refactoring
nothing to commit, working tree cleanGit 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 footerGit stash pop
Чтобы забрать последние изменение из stash и удалить его после применения, нужно выполнить git stash pop.
git stash popGit 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