- 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 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