untracked stash name files git git-stash

name - git stash untracked files



Git diff contra un alijo (11)

Combinando lo que aprendí en este hilo y en este , cuando quiero ver "lo que está dentro del alijo", primero corro:

git stash show stash@{0}

Eso mostrará qué archivos fueron modificados. Luego, para obtener una buena diferencia visual en un diftool, hago:

git difftool --dir-diff stash@{0} stash@{0}^

Esto mostrará todas las diferencias a la vez del alijo dado contra su padre.

Puede configurar la herramienta diff en ~/.gitconfig , por ejemplo, con Meld :

... [diff] tool = meld

¿Cómo puedo ver los cambios que se harán en el árbol de trabajo actual? ¡Me gustaría saber qué cambios se realizarán antes de aplicarlos!


Ella la lista de alijo

git stash list stash@{0}: WIP on feature/blabla: 830335224fa Name Commit stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2

Así que consigue el número de alijo y haz:

Tu puedes hacer:

git stash show -p stash@{1}

Pero si desea una diferencia (esto es diferente para mostrar el alijo, es por eso que escribo esta respuesta. Diff considera el código actual en su sucursal y show solo lo que aplicará )

Puedes usar:

git diff stash@{0}

o

git diff stash@{0} <branch name>

Otra cosa interesante que hacer es:

git stash apply git stash apply stash@{10}

Esto aplica el alijo sin quitarlo de la lista, puede git checkout . para eliminar esos cambios o si está contento, git stash drop stash@{10} para eliminar un alijo de la lista.

Desde aquí nunca recomiendo usar git stash pop y usar una combinación de git stash apply y git stash drop Si aplicas un alijo en la rama incorrecta ... bueno, a veces es difícil recuperar tu código.


Esto me funciona en la versión 1.8.5.2 de git:

git diff stash HEAD


La respuesta de @Magne es la única fecha (muy tardía) que responde a la interpretación más flexible / útil de la pregunta, pero es un poco más complicada de lo necesario. En lugar de cometer y restablecer, simplemente esconda su copia de trabajo, compare y luego descárguela.

git stash save "temp" git diff stash@{0} stash@{1} git stash pop

Ese programa muestra las diferencias entre la parte superior de la pila de alijo y su carpeta de trabajo haciendo que su carpeta de trabajo cambie temporalmente la parte superior de la pila de alijo (alijo @ {0}), moviendo la parte superior original hacia abajo (alijo @ {1}) luego compare el uso de la parte superior original en la posición de ''nuevo conjunto'' para que vea los cambios que se producirían al aplicarlo sobre su trabajo actual.

"¿Pero qué pasa si no tengo ningún trabajo actual?" Entonces estás en el caso aburrido normal. Solo usa la respuesta de @Ambar

git stash show

o la respuesta de @czerasz

git diff stash@{0}

o admita que el ocultamiento y la eliminación del mismo es rápido y fácil de todos modos, simplemente elimine los cambios y revíselos. Si no los quiere por el momento, deséchelos (el índice actual / los cambios en la carpeta de trabajo) se eliminan. En su totalidad eso es

git stash apply git diff git reset git checkout


Para ver el alijo más reciente:

git stash show -p

Para ver un alijo arbitrario:

git stash show -p stash@{1}

Además, uso git diff para comparar el alijo con cualquier rama.

Puedes usar:

git diff stash@{0} master

Para ver todos los cambios en comparación con el maestro de la rama.


O puedes usar:

git diff --name-only stash@{0} master

Para encontrar fácilmente solo nombres de archivo cambiados.


Si la rama en la que se basan sus cambios ocultos ha cambiado mientras tanto, este comando puede ser útil:

git diff stash@{0}^!

Esto compara el alijo con el compromiso en el que se basa.


Si tienes herramientas para diff (como indistintamente comparar)

git difftool stash HEAD


Una forma de hacer esto sin mover nada es aprovechar el hecho de que el patch puede leer los git diff (básicamente, unificados)

git stash show -p | patch -p1 --verbose --dry-run

Esto le mostrará una vista previa paso a paso de lo que normalmente haría un parche. El beneficio adicional a esto es que el parche tampoco evitará que lo escriba en el árbol de trabajo, si por alguna razón usted simplemente necesita que git se calle acerca de cometer antes de modificar, siga adelante y elimine --dry- corre y sigue las instrucciones detalladas.


Ver el alijo más reciente:

git stash show -p

Ver un alijo arbitrario:

git stash show -p stash@{1}

Desde las páginas de manual de Git git stash :

De manera predeterminada, el comando muestra el diffstat, pero aceptará cualquier formato conocido por git diff (por ejemplo, git stash show -p stash @ {1} para ver el segundo alijo más reciente en forma de parche).


FWIW Esto puede ser un poco redundante para todas las demás respuestas y es muy similar a la respuesta aceptada que es correcta; Pero tal vez ayude a alguien.

git stash show --help te dará todo lo que necesitas; Incluyendo información del show stash.

mostrar [<stash>]

Muestre los cambios registrados en el alijo como una diferencia entre el estado del alijo y su padre original. Cuando no se da, muestra el último. De manera predeterminada, el comando muestra el diffstat, pero aceptará cualquier formato conocido por git diff (por ejemplo, git stash show -p stash @ {1} para ver el segundo alijo más reciente en forma de parche). Puede usar las variables de configuración stash.showStat y / o stash.showPatch para cambiar el comportamiento predeterminado.


Si su árbol de trabajo está sucio , puede compararlo con un alijo, primero confirmando el árbol de trabajo sucio y luego comparándolo con el alijo. Luego, puede deshacer la confirmación con el árbol de trabajo sucio (ya que es posible que no quiera tener esa confirmación sucia en su registro de confirmación).

También puede utilizar el siguiente enfoque para comparar dos alijos entre sí (en cuyo caso, simplemente, al abrir uno de ellos al principio).

  • Confíe su árbol de trabajo sucio:

    git add . git commit -m "Dirty commit"

  • Difunde el alijo con ese commit:

    git diff HEAD stash@{0}

  • Luego, después, puede revertir la confirmación y volver a colocarla en el directorio de trabajo:

    git reset --soft HEAD~1 git reset .

Ahora ha cambiado el árbol de trabajo sucio con su alijo, y ha vuelto a donde estaba inicialmente.