tag sheet guide español describe commands cheat git git-stash

git - sheet - escondió algo de código pero no sabe en qué escondite está, ¿cómo averiguarlo?



git reference guide (6)

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

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

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

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

Ojalá hubiera tomado una copia de seguridad en lugar de confiar en git para esconderlos ... suspiro ...

¿Alguien puede ayudar?


Este es el comando que uso. Me ayuda a identificar a qué escondite se refiere.

git stash list | while IFS=: read STASH ETC; do echo "$STASH: $ETC"; git diff --stat $STASH~..$STASH --; done | grep -e ''stash/|<partial_name_of_file_being_searched_for>''

También lo uso en conjunción con un alias en mi archivo .bashrc así:

function gitsearch() { searchCrit=''stash/|''$1 git stash list | while IFS=: read STASH ETC; do echo "$STASH: $ETC"; git diff --stat $STASH~..$STASH --; done | grep -e $searchCrit } alias githunt=gitsearch

El resultado final es que puedo buscar mis escondites de git así:

githunt LoanApplicationFee

y obtenga los siguientes resultados donde puedo ver rápidamente que el alijo 45 tiene lo que estoy buscando:


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

stash : listado por defecto al árbol de trabajo diff

Cuando enumera los alijos, puede proporcionar opciones de git log arbitrarias para cambiar la visualización. Sin embargo, agregar solo " -p " no hace nada, porque cada alijo es en realidad una confirmación de fusión .

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

Las personas que tienen más pistas sobre la verdadera forma del alijo pueden usar " --cc " para anular el " -m ", y el " --first-parent " no hará nada.
Para los diffs, solo afecta a los diffs no combinados, por lo que " --cc " lo reemplaza.
Y para el recorrido, de todos modos estamos caminando por el reflog lineal, por lo que ni siquiera nos preocupamos por los padres.


Para buscar dentro de los cambios en sus git stash list , use la git stash list con la opción pickaxe -G (del git log ):

git stash list -G regex_matching_some_added_or_removed_string


Prueba esto:

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

Eso encontrará sus archivos en la lista. Podría tomar un tiempo.

Una cosa: git stash apply no descarta un alijo. Después de una aplicación exitosa, deberías git stash drop para que no se amontonen en tu lista. Personalmente, aplico el alijo usando git stash pop .


Si solo tiene algunos git stash list , puede examinarlos uno por uno para ver si son los correctos:

git show ''stash@{0}'' git show ''stash@{1}''

etc.

Si tiene algo de código en muchos escondites, y puede recordar una cadena o palabra clave que ingresó en un archivo que (casi) identifica de manera única ese código (uso DUNKIRK aquí), búsquelo utilizando el siguiente comando bash .

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

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

Compare la respuesta de @siri, que busca nombres de archivos que se cambian en los escondites, que es otra estrategia útil.

Alternativamente, para buscar solo las diferencias.

git reflog -p stash | less

y luego busque sus cadenas O archivos, o simplemente navegue por ellos. Esto podría ser grande.


Una combinación de comandos 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 o comentario.

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