¿Cómo ver la date / indicación de date y hora del escondite junto a la identificación del alijo?

Usar git stash list me muestra la list de stashes con sus ID. Usando git stash list --date=local o git stash list --date=relative me da su time, pero no tengo idea de cuál es su ID correspondiente.

Quiero adquirir un escondite en un momento determinado.

git stash list simplemente ejecuta git log con un set particular de opciones:

 list_stash () { have_stash || return 0 git log --format="%gd: %gs" -g --first-parent -m "$@" $ref_stash -- } 

La parte $@ inserta las opciones adicionales que haya especificado (ninguna por defecto, pero --date=relative en este caso). 1

Cuando utiliza --date=relative esto modifica la salida de %gd : en lugar de un breve reflog con un índice , obtiene un breve reflog con una timestamp relativa :

 $ git stash list stash@{0}: ... $ git stash list --date=relative stash@{4 minutes ago}: ... 

La solución en este caso es usar su propio formatting explícito, en lugar de dejar que --date=relative modifique cómo se muestra %gd . Por ejemplo:

 $ git stash list --format='%gd (%cr): %gs' stash@{0} (4 minutes ago): ... 

( %cr inserta la timestamp del committer commit, en formatting relativo; esto tiene sentido una vez que sabes que todo lo que git stash hace es hacer un par de commits para ti, con las confirmaciones almacenadas en el stash especial en lugar de en una twig) .


1 Al revisar esta respuesta, observo que los arguments --first-parent y -m (literalmente presentes en el código git stash ) parecen networkingundantes al principio, debido al argumento -g . El argumento -g para el git log le dice que solo observe el reflog, en lugar del historial de confirmaciones, en cuyo caso, --first-parent no significa nada. Mientras tanto, -m le dice a git diff que divida un commit de fusión, pero estamos viendo loggings de commit, no diffs, entonces, ¿qué está haciendo esto aquí?

La respuesta es que el git log puede mostrar un parche, para lo cual ejecuta git diff , por lo que si le das -p como argumento, el primer --first-parent -m limita a esta diferencia para comparar el compromiso al cual apunta el refrito de ocultación su primer padre La bolsa oculta se compromete a la cual los puntos de input de la recompilation es la confirmación del tree de trabajo, cuyo primer padre es la confirmación original en la que se cuelga la bolsa oculta. (Su segundo padre es el commit del índice y su tercer padre, si está presente, es commit de los files all o no registrados.) Entonces estas opciones están ahí para hacer que git stash list -p diff el commit del tree de trabajo del stash contra el commit que era actual cuando se hizo el alijo en sí.

¡Esto es inteligente, pero bastante oscuro! 🙂

En realidad, puede usar la syntax stash@<date> directamente cuando se refiere a un alijo:

 $ git stash list --date=local stash@{Sun Dec 21 22:32:14 2014}: WIP on develop: 7142a6e Update data files stash@{Fri Dec 12 10:02:20 2014}: WIP on develop: c72abda Add initial calibration data stash@{Wed Dec 10 10:02:05 2014}: WIP on master: 1d27422 Bug fix for gadgeteer $ git show 'stash@{Fri Dec 12 10:02:20 2014}' commit a096484501caf14942f01a6500a5d0c3476d3145 Merge: c72abda 861fff6 Author: Robert Xiao <brx@cs.cmu.edu> Date: Fri Dec 12 13:02:20 2014 -0500 WIP on develop: c72abda Add initial calibration data ... $ git stash pop 'stash@{Fri Dec 12 10:02:20 2014}' 

¡No es necesario get la identificación del alijo en absoluto! Esto incluso funciona con date=relative siempre que las dates relativas sean únicas.