Descartar Git Stash Pop

133

Eu fiz um stit pop e agora tenho muitos conflitos. Eu havia confirmado todo o meu código recente antes do git stash pop, então existe uma maneira de voltar ao último commit e me livrar de todos os conflitos e codificar o git stash popinjetado?

jdog
fonte
Você ainda deseja que o trabalho exibido seja salvo ou nunca mais o verá?
JSCs
1
Não, eu não quero o trabalho estourado. Eu fiz o esconderijo há 4 meses e não tenho certeza do que há lá?
jdog
2
Você se importa com coisas que não foram confirmadas antes de guardar?
Andrew Marshall
Os 4 meses atrás ou os hoje? Eu quero o que eu tinha uma hora atrás.
jdog
5
Se houver conflitos quando você git stashgit, não eliminará o stash da lista. Portanto git reset --hard HEAD, não destrói o trabalho estourado.
jwadsack

Respostas:

189

Isso já foi solicitado e respondido no stackoverflow (consulte Como reverter o repositório Git para um commit anterior? ), Mas a resposta simples é:

git reset --hard HEAD

Isso deve cuidar do seu problema. Observe que isso remove todas as alterações não confirmadas do repositório.

Observe que, se houver conflitos, o esconderijo é preservado. Nos documentos stash :

A aplicação do estado pode falhar com conflitos; nesse caso, não é removido da lista stash. Você precisa resolver os conflitos manualmente e ligar git stash dropmanualmente depois.

MichaelMilom
fonte
1
Isso reverterá seu repositório local para o último commit. Você deve poder enviar todos os seus commit (desde o último push) sem problemas. Se não funcionar, publique os resultados novamente na sua pergunta anterior). Boa sorte.
MichaelMilom
28
Mas isso vai começar o seu esconderijo perdido
K. Weber
19
@ K.Weber se git stash popresultar em conflito, o stash não será excluído da lista de stash.
Daiwei
1
Eu não tenho certeza de quem está votando 'na verdade você não vai perder o seu estoque', eu acabei de perder o meu
Anthony
4
Não muito de um imho solução, uma vez que indica que você vai perder as alterações uncommited.
Ivan P #
4

A redefinição também pode ser chamada em arquivos específicos:

git reset HEAD <filename>...

Você não pode redefinir um arquivo com força. Mas você pode reverter as alterações com o checkout posteriormente:

git checkout -- <filename>...

Seu estoque será preservado, como apontado por Luke na resposta MichaelMilom.

Isso é útil quando você não deseja perder suas alterações locais não confirmadas.

Poppolopoppo
fonte
0

Se você nunca mais quiser ver o trabalho no esconderijo pop-up, isso é tão simples quanto uma redefinição definitiva:

git reset --hard HEAD

Isso instrui o git a ignorar o fato de você ter alterações não confirmadas em seu diretório de trabalho e define o diretório de trabalho, a área de preparação e o caminho para o commit especificado - nesse caso, o HEAD existente, que contém todo o trabalho que você acaba de se comprometer.

jscs
fonte