Git stash дважды

96

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

Итак, я пробежал git stashдважды и готов вернуться к редактированию файлов. Я побежал, git stash applyно не уверен, что все файлы, которые я спрятал, были распакованы. Что я могу сделать? Любой способ проверить?

Когда я бегу git stash show, я вижу только последний из двух своих git stash.

Есть ли вообще показать все git stashes?

Стивенмердок
источник
4
git stash list. Если вы сделали два тайника, то позвоните git stash popдважды.
Феликс Клинг
Привет, ты починил! Вы должны выразить это как ответ. Большое спасибо
Stephenmurdoch 05

Ответы:

175

Вы можете получить список всех тайников с помощью

git stash list

который покажет вам что-то вроде

stash@{0}: WIP on dev: 1f6f8bb Commit message A
stash@{1}: WIP on master: 50cf63b Commit message B

Если вы сделали два тайника, просто позвоните git stash popдважды. В отличие от git stash apply, popприменяет и удаляет последний тайник.

Вы также можете указать конкретный тайник, например

git stash show stash@{1}

или

git stash apply stash@{1}
Феликс Клинг
источник
Большое спасибо. Спас мой день.
Стивенмердок
25
Если вы хотите сделать это git stash popдважды, потому что хотите, чтобы оба тайника были в одной фиксации, но вы столкнулись с ошибкой «: ваши локальные изменения в следующих файлах будут перезаписаны слиянием:» на вашем втором сервере git stash pop, тогда вы можете: 1) git stash pop, 2) git add .и 3 ) git stash pop.
gabe 05
Это мне помогло. Мне нужно было сделать «git stash», а затем «git stash --all», чтобы спрятать несколько новых неотслеживаемых файлов. Выполнение git stash pop дважды не помогло. Я получил обратно только более поздний тайник.
Леопольд Кристьянссон
0

Я столкнулся с этой ситуацией, я сделал два тайника и git stash pop только что распаковал последний тайник. Так я и сделал

git stash list

git stash pop stash@{1}

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

Waaheeda
источник
0

Вы задали несколько разных вопросов в своем посте, и другие респонденты дали хорошие ответы на некоторые из них. Один из наиболее важных вопросов, на который пока нет ответа:

>> Я не уверен, что все файлы, которые я спрятал, были распакованы. Что я могу сделать? Любой способ проверить?

Сравните тайник с местным деревом

Я думаю, что вы хотите сравнить тайник с вашим локальным рабочим деревом . Вы можете поместить переключатель -p в команду stash, и все будет хорошо:

git stash show -p

Если вам нужен какой-то конкретный, просто используйте его имя или идентификатор git stash из списка тайников:

git stash show -p stash@{3}

Может использовать дифф?

Если вам действительно интересно развить свои навыки работы с git, вы всегда можете попробовать diff. Чтобы увидеть разницу между тем, что находится в тайнике, и тем, что проверено в HEAD на главной ветке, можно использовать следующую разницу:

git diff stash@ master

Еще одна изящная команда, показывающая изменения элементов в истории тайника, которые могут пригодиться, - это --stat:

git stash list --stat

Но я думаю, что простой ответ - правильный ответ. Просто используйте переключатель -p, и вы, вероятно, увидите, был ли возвращен тайник, который вы убрали .

 git stash show -p stash@{3}
Кэмерон Маккензи
источник