A menudo guardo el trabajo para más tarde, luego aparecen otras cosas y, unas semanas más tarde, quiero inspeccionar el alijo y descubrir qué cambios haría si lo aplicara al árbol de trabajo en su estado actual.
Sé que puedo hacer un git diff en el alijo, pero esto me muestra todas las diferencias entre el árbol de trabajo y el alijo, mientras que solo estoy interesado en saber qué va a cambiar la aplicación del alijo.
¿Cómo puedo hacer esto?
git stash show -p stash@{1} >~/.diff && vim ~/.diff
(no tiene que servim
ningún editor de texto siempre que su editor de texto tenga soporte para resaltar la sintaxis para ladiff
salida).Respuestas:
git stash show
le mostrará los archivos que cambiaron en su escondite más reciente. Puede agregar la-p
opción para mostrar la diferencia.Si el alijo que le interesa no es el más reciente, agregue el nombre del alijo al final del comando:
fuente
fatal: unable to create temp-file: Invalid argument
alguna idea de por qué?git stash show -p stash@{0}
para ver un alijo específico. 0 muestra el último tono, 1 el segundo último .. etc.git stash list
mostrará todos los disponibles.git stash show -p 'stash@{0}'
)git stash show -p stash@{0}> stash.txt
Para ver una lista actual de alijo:
Verás una lista como esta:
Para ver diff en cualquiera de esos escondites:
fuente
Soy fanático de
gitk
la interfaz gráfica de usuario para visualizar repositorios git. Puede ver el último elemento escondido con:También puede usar ver cualquiera de sus cambios escondidos (según lo enumerado por
git stash list
). Por ejemplo:En la captura de pantalla a continuación, puede ver el alijo como una confirmación en la esquina superior izquierda, cuándo y de dónde vino en el historial de confirmación, 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.
fuente
stash@{X}
valores en la línea de comandos para ver más resultados a la vez, pero no he encontrado una manera simple de decir 'mostrar todas las entradas de escondite' en gitk.gitk stash
parece ser taquigrafía paragitk stash@{0}
gitk `git stash list --pretty=format:%gd`
y luego busca "WIP on" para saltar al siguiente escondite.gitk --reflog
te permite ver todos los escondites y más.Para ver todos los cambios en un alijo no reventado:
Para ver los cambios de un archivo en particular en un alijo no reventado:
fuente
-p
es la abreviatura de--patch
. La opción viene degit-diff
. Si prefiere la forma larga, puede escribirgit stash show --patch
.Más allá de la recomendación de gitk en ¿Es posible obtener una vista previa del contenido oculto en git? puedes instalar tig y llamar
tig stash
. Este programa de consola gratuito / abierto también le permite elegir qué alijo compararfuente
P
y!
teclas respectivamente.gitk
, es relativamente fácil hackearlo para mostrar todos los escondites .Lo uso para ver todos mis escondites con resaltado de diferencias de color (en Fedora 21):
(Adaptado de Git: vea qué hay en un alijo sin aplicar alijo )
fuente
Cuando se hizo esta pregunta por primera vez, esta puede no haber sido una opción, pero si usa PyCharm, puede usar la
UnStash Changes
herramienta (VCS-> Git-> UnStash Changes ...). Esto le permite ver la lista de cambios escondidos, así como pop, drop, clear o apply (en una nueva rama si lo desea):y ver los archivos modificados por alijo:
así como diffs por archivo. En las diferencias, puede seleccionar los cambios individuales para aplicarlos desde los cambios escondidos a la rama de trabajo (usando el galón que apunta a la izquierda):
fuente
Puede ver la lista de todas las reservas mediante el siguiente comando:
El alijo más nuevo es el primero.
Simplemente puede seleccionar el índice
n
de alijo provisto en la lista anterior y usar el siguiente comando para ver los detalles escondidosSimilar,
También puede verificar diff usando el comando:
fuente
sí, la mejor manera de ver qué se modifica es guardar en un archivo así:
fuente
Primero, podemos hacer uso de git stash list para obtener todos los elementos de alijo:
Entonces podemos usar
git stash show stash@{N}
para verificar los archivos bajo un alijo específicoN
. Si lo disparamos, entonces podemos obtener:La razón de esto puede ser que la cáscara está comiendo llaves y git ve
stash@2
y nostash@{2}
. Y para solucionar esto, necesitamos usar comillas simples para llaves como:fuente
Ver la lista de cambios escondidos
Para ver la lista de archivos modificados en un alijo particular
Para ver un archivo en particular en el escondite
fuente
Mostrar todos los escondites
Solo nombres de archivos:
Contenido completo del archivo en todos los escondites:
Obtendrá una salida de color diferenciada con la que puede paginar space ( hacia adelante ) y b( hacia atrás ), y qcerrar el localizador para el alijo actual. Si prefieres tenerlo en un archivo, añádelo
> stashes.diff
al comando.fuente
Además de las respuestas existentes que sugiere usar (para mostrar la diferencia de la tercera a la última reserva)
Tenga en cuenta que en la
git-stash
documentación , está escrito quePor lo tanto, también es posible usar (esto es equivalente al comando anterior)
Lo que también debería evitar algunos problemas de Powershell .
fuente
Me gusta cómo
gitk
puedo mostrarle exactamente lo que no se ha rastreado o se encuentra en el índice, pero de forma predeterminada mostrará esas "confirmaciones" ocultas en el medio de todas sus otras confirmaciones en la rama actual.El truco es ejecutar gitk de la siguiente manera:
(La cita está ahí para que funcione en Powershell, pero de esta manera también debería funcionar en otros shells).
Si busca esta sintaxis en la página de ayuda de gitrevisions , encontrará lo siguiente:
Aparentemente, esto pondrá a gitk de tal modo que solo se mostrarán los padres inmediatos del commit seleccionado, que es exactamente lo que me gusta.
Si desea llevar esto más lejos y enumerar todas las reservas, puede ejecutar esto:
(Esas comillas simples dentro de los backticks son necesarias para apaciguar a Bash, de lo contrario se queja del signo de exclamación)
Si está en Windows y usa cmd o Powershell:
fuente
El siguiente comando se puede usar para extraer el diferencial de cambio oculto nuevamente más que cualquier otro alijo o confirmación o ramificación o CABEZA.
Veamos cómo podemos usar cada uno de los comandos mencionados anteriormente.
Para obtener la diferencia entre el escondite más escondido @ {0} y la rama maestra:
$ git diff stash @ {0} maestro
Solo muestra los nombres de los archivos, no las diferencias de los cambios:
$ git diff - escondite solo de nombre @ {0} maestro
Vea la diferencia entre las reservas seleccionadas para un archivo seleccionado:
$ git diff stash @ {0} ^ 1 stash @ {0} -
Vea la diferencia entre los dos últimos escondites:
$ git difftool alijo @ {0} alijo @ {0} ^ 1
git difftool --dir-diff alijo @ {0} alijo @ {0} ^ 1
Resumen:
Comandos que son útiles para extraer la diferencia de stash seleccionado git stash show, git show, git diff, git difftool.
Vea la diferencia usando el comando git stash show,
git stash show -p stash @ {0}
Vea los cambios en el escondite usando el comando git show,
git show stash @ {1}
Vea la diferencia entre el último escondite y el commit seleccionado usando el comando git diff,
git diff stash @ {0}
Referencias
https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/
https://git-scm.com/docs/git-show
https://git-scm.com/docs/git-stash
fuente