После того, как вы узнаете хэш сброса, который вы сбросили, вы можете применить его в качестве хранилища:
git stash apply $stash_hash
Или вы можете создать для него отдельную ветку с помощью
git branch recovered $stash_hash
После этого вы можете делать все, что захотите, со всеми обычными инструментами. Когда вы закончите, просто взорвите ветку.
Нахождение хеша
Если вы только что выдвинули его, а терминал все еще открыт, у вас будет значение хеша, напечатанное git stash pop
на экране (спасибо, Долда).
В противном случае вы можете найти его, используя это для Linux, Unix или Git Bash для Windows:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
... или используя Powershell для Windows:
git fsck --no-reflog | select-string 'dangling commit' | foreach { $bits = $_ -split ' '; echo $bits[2];}
Это покажет вам все коммиты в подсказках вашего графа коммитов, на которые больше не ссылаются ни одна ветвь или тэг - каждый потерянный коммит, включая каждый сохраненный вами коммит, будет где-то на этом графе.
Самый простой способ найти желаемый коммит - вероятно, передать этот список в gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
... или посмотрите ответ от emragins при использовании Powershell для Windows.
Это запустит браузер хранилища, показывающий вам каждый коммит в хранилище когда-либо , независимо от того, доступен он или нет.
Вы можете заменить gitk
там на что-то вроде git log --graph --oneline --decorate
, если вы предпочитаете хороший график на консоли, а не отдельное приложение с графическим интерфейсом.
Чтобы обнаружить тайники, ищите сообщения коммитов этой формы:
WIP on somebranch : commithash Некоторое старое сообщение о коммите
Примечание : сообщение о фиксации будет только в этой форме (начиная с «WIP on»), если вы не предоставили сообщение, когда сделали git stash
.