¿Es posible previsualizar el contenido de stash en git?


A menudo guardo el trabajo para más tarde, luego aparecen otras cosas, y unas semanas más tarde, quiero inspeccionar el alijo y averiguar qué cambios haría si lo aplicara al árbol de trabajo en su estado actual.

Sé que puedo hacer un git diff en el stash, pero esto me muestra todas las diferencias entre el árbol de trabajo y el stash, mientras que solo estoy interesado en saber qué va a cambiar el stash apply.

¿Cómo puedo hacer esto?

 394
Author: SMR, 2010-08-26

14 answers

git stash show le mostrará los archivos que cambiaron en su alijo más reciente. Puede agregar la opción -p para mostrar la diferencia.

git stash show -p

Si el alijo que le interesa no es el más reciente, añada el nombre del alijo al final del comando:

git stash show -p stash@{2}
 538
Author: Jlew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-02 18:10:02

Para ver una lista actual de alijo, utilice

git stash list

Debería poder ver una lista, como

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

Para ver la diferencia en cualquiera de esos escondites, use el comando git stash show -p stash@{n}

 72
Author: segfault,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-16 15:03:03

Soy fan de la interfaz gráfica de usuario de gitk para visualizar repositorios de git. Puedes ver el último artículo guardado con:

gitk stash

También puede usar ver cualquiera de sus cambios guardados (como se indica en git stash list). Por ejemplo:

gitk stash@{2}

En la siguiente captura de pantalla, puede ver el alijo como una confirmación en la parte superior izquierda, cuándo y de dónde vino en el historial de confirmaciones, la lista de archivos modificados en la parte inferior derecha y la diferencia línea por línea en la parte inferior izquierda. Todo mientras el alijo todavía está escondido lejos.

gitk viendo un alijo

 25
Author: Jeff Ward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-09 17:45:43

Para ver todos los cambios en un alijo no reventado:

git stash show -p stash@{0}

Para ver los cambios de un archivo en particular en un alijo no reventado:

git diff HEAD stash@{0} -- path/to/filename.php
 15
Author: Wesley Musgrove,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-04 12:47:27

Simplemente aplicando el alijo usando git stash apply? Esto no elimina el alijo, por lo que puede restablecer su árbol de trabajo sin perder el trabajo guardado, si no le gustan los cambios. Y si te gustan, simplemente puedes eliminar el alijo con git stash drop.

 12
Author: lunaryorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-08 03:52:03

Más allá de la recomendación de gitk en ¿Es posible previsualizar el contenido del alijo en git? puede instalar tig y llamar a tig stash. Este programa free / open console también le permite elegir qué alijo comparar

 5
Author: Bruce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:43

Uso esto para ver todos mis alijos con resaltado de diferencias de color (en Fedora 21):

git stash list | 
  awk -F: '{ print "\n\n\n\n"; print $0; print "\n\n"; 
  system("git -c color.ui=always stash show -p " $1); }' | 
  less -R

(Adaptado de Git: ver lo que hay en un stash sin aplicar stash )

 3
Author: seanf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:27

Puede ver la lista de todos los escondites con el siguiente comando:

$ git stash list

stash@{0}: WIP on dev: ddd4d75 spelling fix

stash@{1}: WIP on dev: 40e65a8 setting width for messages

......

......

......


stash@{12}: WIP on dev: 264fdab added token based auth

El alijo más nuevo es el primero.

Simplemente puede seleccionar index n del alijo proporcionado en la lista anterior y usar el siguiente comando para ver los detalles guardados

git stash show -p stash@{3}

Del mismo modo,

git stash show -p stash@{n}

También puede comprobar diff usando el comando :

git diff HEAD stash@{n} -- /path/to/file
 3
Author: Vishvajit Pathak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-04 12:45:40

Primero podemos hacer uso de git stash list para obtener todos los elementos de stash:

$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...

Entonces podemos hacer uso de git stash show stash@{N} para comprobar los archivos bajo un alijo específico N. Si lo disparamos entonces podemos obtener:

$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

La razón de esto puede ser que el shell está comiendo llaves y git ve stash@2 y no stash@{2}. Y para arreglar esto necesitamos hacer uso de comillas simples para llaves como:

git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml                     | 16 ++++++++--------
com/java/myproject/MyJavaClass.java                    | 16 ++++++++--------
etc.
 2
Author: i_am_zero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-04 14:43:19

Cuando se hizo esta pregunta por primera vez, puede que no haya sido una opción, pero, si usa PyCharm, puede usar la herramienta UnStash Changes (VCS->Git->UnStash Changes...). Esto le permite ver la lista de cambios guardados, así como pop, drop, clear o apply (en una nueva rama si lo desea):

Ventana de Cambios de Unstash

Y ver los archivos modificados por alijo:

Ventana de Rutas Afectadas

Así como diferencias por archivo. En las diferencias puede seleccionar cambios individuales para aplicar desde el cambios guardados en la rama de trabajo (usando el chevron que apunta a la izquierda):

introduzca la descripción de la imagen aquí

 2
Author: hlongmore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-14 21:41:25

Sí la mejor manera de ver lo que se modifica es guardarlo en un archivo así:

git stash show -p stash@{0} > stash.txt
 1
Author: Walterwhites,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-10 10:19:09

Mostrar todos los alijos

Solo nombres de archivo:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show $i; done

Contenido completo del archivo en todos los escondites:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show -p $i; done

Obtendrá una salida diff coloreada que puede page con espacio (forward ) y b (hacia atrás ), y q para cerrar el buscapersonas para el alijo actual. Si prefiere tenerlo en un archivo, añada > stashes.diff al comando.

 0
Author: ccpizza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-21 15:59:35

Ver lista de cambios guardados

git stash list

Para ver la lista de archivos cambiados en un alijo en particular

git stash show -p stash@{0} --name-only

Para ver un archivo en particular en stash

git show stash@{0} path/to/file
 0
Author: Bharat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-12 12:50:51

Además de las respuestas existentes que sugieren usar (para mostrar la diferencia del último alijo)

git stash show -p stash@{2}

Tenga en cuenta que en el git-stash documentación, está escrito que

Los stash también se pueden referenciar especificando solo el índice de stash (por ejemplo, el entero n es equivalente a stash@{n}).

Por lo tanto, también es posible usar (esto es equivalente al comando anterior)

git stash show -p 2

Que también debería evitar algunos Powershell issues .

 0
Author: user202729,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-04 10:17:18