escondió algún código, pero no sabe en qué escondite está: ¿cómo averiguarlo?

Escribí un código considerable para una function y escondí los cambios en git.

Después de eso, introduje varios cambios en el repository e hice un alijo de git y lo apliqué varias veces (leí más de 100 veces).

Después de casi 2 meses, ahora quiero recuperar los cambios de git stash, pero no puedo encontrarlos sin importar qué.

git stash apply varios git stash apply , git stash list , git stash list -p . Nada funciona. No puedo encontrar esos viejos cambios escondidos.

Ojalá hubiera tomado una copy de security en lugar de confiar en git para esconderlos … suspiro …

¿Alguien puede ayudar?

Prueba esto:

 git stash list -p | grep 'diff --git' | grep <your file name> 

Eso encontrará tus files en la list. Podría tomar un time.

Una cosa: la aplicación de git stash apply no descarta un alijo. Después de una request exitosa, debes git stash drop para que no atempere tu list. Personalmente, aplico el alijo usando git stash pop .

Si solo tiene algunos stashes enumerados en la list de git stash list , puede examinarlos uno por uno para ver si son los correctos:

 git show '[email protected]{0}' git show '[email protected]{1}' 

etc.

Si tiene algún código en muchos depósitos, y puede recordar una cadena o palabra key que escribió en un file que identifica (casi) de forma única ese código (yo uso DUNKIRK aquí), búsquelo utilizando el siguiente command bash .

 for i in `git reflog --pretty=format:%H stash`; do git grep DUNKIRK $i; done 

tenga en count que git grep busca todo el process de pago, no solo los cambios.

Compare la respuesta de @siri, que busca los nombres de file que se cambian en los depósitos, que es otra estrategia útil.

Alternativamente, para search solo los diffs

  git reflog -p stash | less 

y luego busca tus cadenas O files, o simplemente navega por él. Esto podría ser grande.

Nota: en el caso de una confusión fusionada oculta , una git stash list -p no devolvería nada.
Eso cambiará con Git 2.2 (Q4 2014) y confirmará 288c67c por Jeff King ( peff ) :

stash : listdo por defecto a diff de tree de trabajo

Cuando enumera los depósitos, puede proporcionar opciones de git log arbitrarias para cambiar la visualización. Sin embargo, agregar solo " -p " no hace nada, ya que cada alijo es en realidad un compromiso de fusión .

Este detalle de implementación es fácil de olvidar, lo que lleva a confundir a los usuarios que piensan que " -p " no funciona. Podemos hacer esto más fácil por defecto a " --first-parent -m ", que mostrará el diff en el tree de trabajo.
Esto omite por completo la porción de índice del alijo, pero es simple y coincide con lo que ofrece el " git stash show ".

Las personas que son más hábiles sobre la verdadera forma de stash pueden usar " --cc " para anular el " -m ", y el " --first-parent " no hará nada.
Para diffs, solo afecta las diferencias no combinadas, por lo que " --cc " lo anula.
Y para el cruce, estamos caminando el reflog lineal de todos modos, por lo que ni siquiera nos importan los padres.

Una combinación de commands git de las respuestas anteriores me ayudó con lo que necesito. Publicar mi respuesta aquí ya que podría ayudar a otros y porque no puedo aceptar ninguna respuesta / comentario

 git stash list -p - showed me the list of stashes git stash pop '[email protected]{12}' - popped out the 12th stash which contains my code.