Descartar Git Stash Pop

133

Hice un git stash pop y ahora tengo un montón de conflictos. Había cometido todo mi código reciente antes del git stash pop, entonces, ¿hay alguna manera de volver al último compromiso y deshacerme de todos los conflictos y codificar el git stash popinyectado?

jdog
fuente
¿Todavía desea guardar el trabajo emergente o no desea volver a verlo?
jscs
1
No, no quiero el trabajo Popped. Hice el escondite como hace 4 meses y no estoy seguro de qué hay allí.
jdog
2
¿Te importan las cosas que no estaban comprometidas antes de esconderlas?
Andrew Marshall
¿Los de hace 4 meses o los de hoy? Quiero lo que tenía hace una hora.
jdog
55
Si hay conflictos cuando git stashgit no eliminará el alijo de la lista. Entonces git reset --hard HEADno destruye el trabajo reventado.
jwadsack

Respuestas:

189

Esto ya se ha preguntado y respondido en stackoverflow (consulte ¿Cómo revertir el repositorio de Git a un commit anterior? ), Pero la respuesta simple es:

git reset --hard HEAD

Esto debería solucionar su problema. Tenga en cuenta que esto elimina todos los cambios no confirmados del repositorio.

Tenga en cuenta que si hay conflictos, el alijo se conserva. De los documentos escondidos :

Aplicar el estado puede fallar con los conflictos; en este caso, no se elimina de la lista oculta. Debe resolver los conflictos a mano y llamar git stash dropmanualmente después.

MichaelMilom
fuente
1
Esto revertirá su repositorio local a la última confirmación. Debería poder enviar todos sus commits (desde el último envío) sin problemas. Si no funciona, vuelva a publicar los resultados en su pregunta anterior). Buena suerte.
MichaelMilom
28
Pero esto hará que pierdas tu alijo
K. Weber
19
@ K.Weber si git stash popresulta en conflicto, el alijo no se eliminará de la lista de alijo.
Daiwei
1
No estoy seguro de quién está votando el 'en realidad no perderás tu alijo', acabo de perder el mío
Anthony
44
No es una gran solución en mi humilde opinión, ya que señala que se va a perder los cambios uncommited.
Ivan P
4

Restablecer también se puede invocar en archivos específicos:

git reset HEAD <filename>...

Sin embargo, no puede restablecer un archivo. Pero puede revertir los cambios con el pago posterior:

git checkout -- <filename>...

Su escondite será preservado, como lo señaló Luke en la respuesta de Michael Milom.

Esto es útil cuando no desea perder sus cambios locales no comprometidos.

Poppolopoppo
fuente
0

Si nunca desea volver a ver el trabajo en el alijo reventado, esto es tan simple como un restablecimiento completo:

git reset --hard HEAD

Esto le dice a git que ignore el hecho de que tiene cambios no confirmados en su directorio de trabajo, y establece el directorio de trabajo, el área de preparación y diríjase a la confirmación que especifique, en este caso, el HEAD existente, que contiene todo el trabajo que Acabo de comprometerme.

jscs
fuente