2015-08-19 1 views
2

Я случайно создал Git тайник с --all вариант, который, согласно документации,Применение Git тайник, созданный с --all

Если опция --all используется вместо то игнорируемые файлы прятали и очищается в дополнение к необработанным файлам.

Так что теперь восстановить свои изменения с git stash pop не удается:

some/ignored/file already exists, no checkout 
Could not restore untracked files from stash 

(То, что я на самом деле следовало бы сделать, это использовать --include-untracked)

git stash show -p все еще перечисляет мои изменения, без каких-либо игнорируемых файлов. Как я могу сделать apply мой кошелек без git, пытаясь восстановить игнорируемые файлы?

Редактировать: Я только что создал тестовый репозиторий и сделал git stash --all. Игнорируемые файлы были спрятаны и удалены из файловой системы. Моя проблема в том, что в моем случае выше они были спрятаны, но не удалены из файловой системы, так что это, по-видимому, является причиной проблемы.

+0

Почему вы не хотите восстанавливать проигнорированные файлы? –

+0

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

+0

Что делать, если вы удаляете проигнорированные файлы из инструментария и затем пытаетесь выскочить из кошелька? Он должен работать ... –

ответ

2

Используйте журнал, чтобы найти совершить хэш вашего заначка

$ git log --graph --all --decorate --oneline 

Все важно, потому что он также показывает тайники

он должен выглядеть следующим образом:

*-. cd5e9ae (refs/stash) WIP on master: cd48088 Fixed GET chats output 
|\ \ 
| | * e48d0d7 untracked files on master: cd48088 Fixed GET chats output 
| * 1a3bf97 index on master: cd48088 Fixed GET chats output 
|/ 
* cd48088 (HEAD, origin/master, master) Fixed GET chats output 

Теперь вы хотите, чтобы оформить верхнюю часть тайника (здесь, это cd5e9ae)

$ git checkout cd5e9ae 

Вы будете в отдельном РУКОВОДИТЕЛЯ состояние
сбросить один шаг назад, сохраняя изменения

$ git reset HEAD~1 

и теперь копить его, как ты хотел

$ git stash --include-untracked 

Теперь вы можете вернуться к мастеру или где бы вы ни работали, и применить этот новый правильный тайник

$ git checkout master 
$ git stash pop 

Вдохновленный this blog post

Я просто проверял, и она работала в моем проекте с моим игнорируемых файлов , он должен работать и на вас.

1

Вы должны удалить эти файлы, чтобы вытащить трюк. Вы можете сделать это вручную или вы можете следовать этому методу:

git stash -all # make a new stash   
git stash pop [email protected]{1} # apply your original stash 

Если вам это нравится, вы можете упасть новый тайник вы сделали:

git stash drop 
+0

См. Комментарий к ПП выше: * Это правда, но я полагаю, что должен быть правильный способ сделать это. Это не относится ко мне, но проигнорированные файлы могут быть изменены с момента создания тайника, и вы не хотите терять эти изменения. * –

+0

'git stash -u' не удалит эти файлы, потому что, как я уже сказал, они игнорируются. – amiuhle

+0

Чем он должен делать резервные копии/перемещать их. –