rama que hacer hace ejemplo crear como comando git git-diff git-stash working-copy

que - ¿Puede git hacer un diff de la copia de trabajo con el alijo



git commit ejemplo (8)

Creo que OP quería la respuesta para ver qué diferencia contiene el alijo aparte de los archivos presentes en la copia de trabajo.

El siguiente comando muestra lo que contiene el alijo.

git stash show -p stash@{0}

¿Cómo puedo diferenciar mi copia de trabajo actual contra un alijo?

Mi caso de uso: mi copia de trabajo ya contiene un subconjunto de los cambios en mi stash@{0} , pero no quiero aplicar todos los cambios en el stash@{0} . Quiero hacer un diff para ayudar a determinar qué cambios deseables en el stash@{0} todavía faltan en mi copia de trabajo.


No estoy seguro de lo que quería el OP, pero lo uso para ver cuál es el conjunto de diferencias real del alijo:

git difftool stash@{0}^!

o

git diff stash@{0}^!

o

git diff stash@{0}^! > patchfile


No puede hacer esto sin cometer o esconder su copia de trabajo. El escondite es probablemente de menor riesgo:

git add -A # Stage all changes in your working copy. git stash save --keep-index # Stash your working copy and leave it intact git diff stash@{0} stash@{1}

Para deshacerse del alijo que acaba de hacer por diferencia, use git stash pop o git stash drop stash@{0} .

Si desea utilizar un compromiso en su lugar, consulte la respuesta de @Magne .


Para hacer una diferencia de un archivo o carpeta presente en el directorio de trabajo con eso en un alijo puede hacer:

git diff stash@{0} -- /path/to/fileorfolder

Aquí el stash@{0} just represent a commit HASH, so it works exactly how git diff works. stash @ {0} `es solo un controlador.


Puede usar el comando diff de Unix junto con dos comandos Git de la siguiente manera:

diff <(git diff) <(git stash show -p stash@{0})

Por supuesto, puedes cambiar el alijo @ {0} al que quieras. Este comando en realidad está comparando el directorio de trabajo real (git diff) con uno de sus escondites.

ACTUALIZAR

También puedes instalar Colordiff y ver un resultado mucho mejor:

Instalación:

  • Ubuntu / Debian: sudo apt-get install colordiff
  • OS X: instalación de cerveza colordiff

y luego simplemente cambie el comando a:

colordiff <(git diff) <(git stash show -p stash@{0})



Si fue su alijo más reciente, git diff stash@{0} lo hará. Si no es así, puedes usar la git stash list para obtener el índice con el que quieres comparar.


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. Después, es posible que desee deshacer la confirmación de su árbol de trabajo (para mantener limpio su historial).

  • Confíe su árbol de trabajo sucio:

    git add . git commit -m "Dirty commit"

  • Difunde el alijo con ese commit:

    git diff 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.