Иногда, когда мы вносим изменения в проект в git, мы понимаем, что нам внезапно нужно вернуться к последней чистой версии рабочего каталога нашего проекта — то есть к версии без локальных изменений. Например, предположим, что вы недавно клонировали или перенесли версию проекта на свой локальный компьютер и внесли некоторые локальные изменения в три файла. Чтобы вернуть проект к версии, которую вы клонировали или вытащили, вы можете выполнить следующую команду:
git stash
Это позволит сохранить изменения, спрятав их в безопасное место, а также вернуться к чистой версии проекта, которую можно сохранить, отредактировать или сделать с ней все, что угодно. Большинство людей знают, что это можно сделать с помощью git stash
, но есть и несколько других возможностей git stash
. Когда дело доходит до git stash
, есть несколько действительно полезных команд, о которых вы должны знать:
git stash list
git stash show
git stash apply
git stash pop
git stash push
git stash clear
git stash drop
Вывод списка или отображение всех изменений в git stash
Хотя мы можем легко использовать git stash
для очистки нашего рабочего дерева, мы также можем просмотреть все тайники с помощью следующей команды:
git stash list
Интересно, что это покажет несколько тайников, которые возникли в прошлом. Поэтому Git сохраняет все тайники на случай, если вы захотите извлечь их в будущем. Например, вот проект с большим количеством тайников после выполнения команды git stash list
:
stash@{0}: WIP on master: abf89a3 feat-ui: updated look and feel
stash@{1}: WIP on master: 39329d5 feat-ui: Updated CSS Quiz Button
stash@{2}: WIP on master: 46bc7aa feat-ui: Bug fix on article API
stash@{3}: WIP on master: 5dafc53 feat-ui: Fixed issue with secondary-navigation overflow
Все тайники хранятся в вашем файле ref/stash
в папке .git
. Более подробный вид последних git stash
можно также просмотреть с помощью git stash show
:
common.js | 405 +--------------------------------------------------------
public/quiz.js | 267 +------------------------------------
Хотя это вполне подходит для некоторых, еще более детальный вид, включая изменения на уровне кода, можно получить, выполнив следующую команду:
git stash show -p
git stash show
также имеет несколько других полезных опций:
Восстановление git stash с помощью apply или pop
Хотя знание того, что было сохранено, само по себе полезно, также очень полезно иметь возможность восстановить сохраненную информацию. Чтобы восстановить последнюю сохраненную часть кода, вы можете выполнить следующую команду:
git stash apply
Если вы, как и я, имеете тонны неиспользуемых тайников, иногда полезно восстановить предыдущий тайник, например stash@{3}
, или stash@{25}
, как в списке, который мы видели ранее. В этих случаях мы просто перечисляем номер тайника после команды. Например, чтобы восстановить stash@{25}
, мы выполним следующее:
git stash apply 25
Как и следовало ожидать, если вы изменили файлы, а затем попытались выполнить команду git stash apply
поверх них, вы можете столкнуться с конфликтами слияния. Поэтому перед выполнением этой команды убедитесь, что они устранены.
git stash apply против git stash pop
Только что мы использовали git stash apply
для восстановления хранилища кода. При этом мы возьмем наш сохраненный код и применим его поверх нашего рабочего дерева. При этом сохраненная копия кода останется в списке сохраненного кода — так что вы ее не потеряете. Если вы хотите восстановить упрятанный код и удалить его из списка упрятанного кода, вам нужно использовать pop
:
git stash pop
Превращение вашего тайника в ветку
Еще одна полезная вещь, которую делает git stash
и которая используется недостаточно, это то, что она позволяет нам создать новую ветку из нашего сохраненного кода. Если у вас есть некоторый сохраненный код, вы можете взять текущий проект с изменениями, применить к нему сохраненный код, а затем создать новую ветку с нужным вам именем. Например, следующая команда создаст ветку с именем new-code
:
git stash branch new-code
Другие способы сохранения вашего тайника и git stash push
Мы уже рассказывали о том, как использовать git stash
для сохранения последнего кода, но вы также можете встретить следующую команду в природе:
git stash push
Эта команда на самом деле такая же, как git stash
, но может быть немного запутанной, если вы не знаете об этом. Помимо этого, git stash
и git stash push
имеют ряд полезных опций, если вы захотите их использовать:
Подавление сообщений с помощью git stash
В качестве примечания, сейчас имеет смысл упомянуть, что практически все команды git stash
имеют опцию -q
, которая подавляет любые сообщения или ошибки:
git stash apply -q
Удаление вашего тайника
Наконец, иногда вы хотите удалить весь свой тайник. Это немного опасно, поэтому используйте его с осторожностью, но если вы хотите, все, что вам нужно сделать, это:
git stash clear
Если вы не хотите делать ничего подобного, но все же хотите удалить определенный элемент из тайника, вы можете выполнить команду git stash drop
для удаления самой последней сохраненной записи, или git stash drop 25
для удаления тайника, указанного как stash@{25}
в результате git stash list
.