¿Cuáles son las diferencias entre los siguientes comandos de git?¿Cuáles son las diferencias entre estos comandos de git diff?
git diff HEAD
git diff HEAD^
git diff --cached
o el sinónimogit diff --staged
git diff
¿Cuáles son las diferencias entre los siguientes comandos de git?¿Cuáles son las diferencias entre estos comandos de git diff?
git diff HEAD
git diff HEAD^
git diff --cached
o el sinónimo git diff --staged
git diff
git diff HEAD
- Muestra lo que ha cambiado desde la última confirmación.git diff HEAD^
- Muestra qué ha cambiado desde la confirmación antes de la última confirmación.git diff --cached
- Mostrar lo que se ha agregado al índice a través de git add
pero aún no confirmado.git diff
- Mostrar lo que ha cambiado pero aún no se ha agregado al índice a través de git add
.Parece que este:
Working
Directory <----+--------+------+
| | | |
| | | |
V | | |
"git add" | | |
| diff | |
| | | |
V | | |
Index <----+ diff HEAD |
| | | |
| | | |
V | | |
"git commit" | | |
| diff --cached | |
| diff --staged | |
V | | |
HEAD <----+--------+ |
| |
| diff HEAD^
V |
previous "git commit" |
| |
| |
V |
HEAD^ <--------------------+
HEAD
es la corriente HEAD
puntero en el árbol, HEAD^
es el commit antes HEAD
.
--cached
No estoy seguro.
--cached
le mostrará los cambios que haya realizado pero que no haya agregado al índice.
El git tutorial en kernal.org es una muy buena lectura.
Tienes '--cached' un poco mal: se nota que sólo los cambios que haya * * Se ha añadido al índice (pero no ha cometido) – Amber
git diff HEAD
: Diff between HEAD y el directorio de trabajo.git diff HEAD^
: Diferencia entre el antecesor directo de HEAD y el directorio de trabajo.git diff --cached
o el sinónimo git diff --staged
: Diferencia entre HEAD y el índice.git diff
: Diferencia entre el índice y el directorio de trabajo.¿Alguien tiene una buena manera de recordar esto? Sigo volviendo aquí. –
@kevin Es mejor que hacer sudoku ¿verdad? – Samuel
Desde el Git Community Book:
git diff
le mostrará los cambios en el directorio de trabajo que aún no se clasifican para la siguiente compromiso
git diff --cached
le mostrará la diferencia entre el índice y su última confirmación; lo que comprometería si ejecuta "git commit" sin la opción "-a".
git diff HEAD
muestra los cambios en el directorio de trabajo desde el último commit; lo que estarías cometiendo si ejecutaras "git commit -a".
Aquí está una manera fácil de recordar estos comandos:
git diff
's para ser el directorio de trabajo, y su objetivo es el índice.--cached
cambia la fuente para que sea el índice. No necesariamente cambia el objetivo una vez que agregas más argumentos. Pero, por comodidad, el objetivo se convierte en el último compromiso si no se proporciona ninguno.Diviértete mezclarlos a su gusto :)
@Picasso ¿Está dibujado a mano o usaste alguna herramienta de arte ASCII? ¿Hay algún comando git para esto también? ;) – takeshin
@takeshin: Dibujado a mano; no es tan dificil. (Pero hay un modo emacs para dibujar ascii art, no es que lo use). – Amber
+1 solo para el ascii-art. Una imagen = 1000 palabras; Una ascii-art = 1025 caracteres. –