Git - Diff
Git - diff
-
Los cambios en el
(Working Directory)
no están aún preparados{UnStaged}
para la próxima confirmacióngit commit
-
Resumen
- Muestra que has cambiado dentro del
(Working Directory)
pero no lo que has preparado{Staging Area/Index}
- Muestra que has cambiado dentro del
-
git diff
- Este comando sin argumentos ni opciones compara el contenido que almacena el
(Working Directory/WorkSpace)
con el contenido que está en el{Staging Area/Index}
, el resultado te muestra por pantalla todos los cambios que has hecho pero que todavía{No Has Preparado/Not-Staged}
el archivo mediante el comandogit add <archive>
git diff
- Mostrar sólo los cambios de modificación en el archivo LICENCE
git diff LICENCE
- LICENCE fue añadido mediante
git add
y paso del(Working Directory)
al{Staging Area/Index}
, se volvió a modificar el contenido del archivo y paso del{UnModified}
del{Staging Area/Index}
al{Modified}
Ejemplo : Muestra las diferencias no añadidas al {Index} mediante
git add <archivo>
- Para mostrar los cambios que existen en el
(Working Directory/WorkSpace)
relativos alcommit
seleccionado dentro del[Repositorio Local]
git diff <commit>
- Muestra los cambios que existen en el (Working Directory/WorkSpace) relativos la branch seleccionado dentro del [Repositorio Local]
git diff <branch>
Opciones importantes
-
Comparación no considera blancos, ni lineas vacías
git diff -b archivo1 archivo2
-
Muestra solo nombres de ficheros y su estado (sin diferencias)
git diff --name-status
-
Muestra solo nombres de ficheros (sin diferencias)
git diff --name-only
-
Muestra estadísticas de cambios (sin diferencias)
git diff --stat
ogit diff --numstat
-
Muestra 200 líneas de contexto (probablemente todo el fichero)
git diff --unified=2000
Uso diff –cached / –staged
-
Se usa para ver que tienes en el estado {Staging Area/Index/Staged} y que será incluido en el próximo commit
-
Muestra y compara todos los cambios {Staging Area/Index/Staged} con la última snapshot/confirmación/commit del [Repositorio] que descargaste
Al ejecutar el comando
git diff
con la opción –cached , el comando compará los cambios preparados {Staging Area/Index} con los del [Repositorio Local]
- Cambios entre el {Index} y su último commit ; lo que sería confirmado si ejecuta
git commit
sin la opción-a
git diff --cached
- Muestra todos los cambios de los ficheros {Staged} del [Repositorio Local]
git diff --cached
- Muestra solo los cambios en LICENSE si están en {Staged} con respeto al [Repositorio Local]
git diff --cached LICENCE
- Si quieres ver lo que has preparado en el estado {Staged} para en tu próximo commit , esta opción compara sus cambios {Staged-Preparados} con su último commit dentro del [Repositorio Local]
git diff --staged
- Comandos equivalentes : Realizan la misma acción
git diff --cached <archivo>
git diff --staged <archivo>
-
Cuando ejecutamos algunos de estos comandos nos aparecerán unas marcas y colores indicando las diferencias de código entre el antes y el después.
-
Líneas eliminadas o reemplazadas : Rojas y comienzan con el símbolo
-
-
Líneas nuevas o añadidas : Verdes y comienzan con el símbolo
+
-
Comparar archivos de 2 ramas
- Buscar las diferencias entre un archivo concreto entre las ramas utilizamos el comando la ruta del archivo como tercer argumento con
git diff
git diff <branch1> <branch2>
Ejemplo
git diff rama-alternativa master
# rama-alternativa rama master
diff --git a/calculator.html b/calculator.html
index 29c6586..5010ee9 100644
--- a/calculator.html # Rama : Alternativa
+++ b/calculator.html # Rama : master
Comparar Ramas distintas o iguales
- Este ejemplo introduce el punto
.
como operador- Sin Puntos
- Muestra las últimas diferencias de contenidos entre las 2 ramas distintas dentro del mismo [Repositorio Local]
git diff branch1 branch2
- 2 Puntos
El mismo resultado que el anterior ejemplo
git diff branch1..branch2
Los dos puntos de este ejemplo indican que la entrada de diferencia son los extremos de ambas ramas. Si se omiten estos puntos y se utiliza un espacio entre las ramas, el efecto que se produce es el mismo. Además, está el operador de tres puntos
- 3 Puntos
Compara la versión anterior del archivo antes del último commit y el último commit del archivo
git diff branch1...branch2
Operador de 3 puntos
...
inicia la comparación cambiando el 1º parámetro de entradabranch1
ya que convierte elbranch1
en una referencia de la confirmación antecesora común compartida entre las 2 entradas de diferencia.
El antecesor compartido de branch1
y branch2
El último parámetro de entrada permanece inmutable como extremo de branch2
Comparar mediante HEAD
-
Manual :
- Cambiar en el (Working Tree) desde su
último commit
; lo que sería confirmado si ejecutagit commit
sin la opción-a
- Cambiar en el (Working Tree) desde su
git diff HEAD
- Puede usarse [HEAD] para comparar contra el último commit
- Muestra la diferencia entre el [HEAD] que es el puntero que señala a la rama y al último commit con la que estamos trabajando en el [Repositorio Local] con los archivos que estén alojados (Sin Seguimiento/UnTracked) del (Working Directory) de la misma rama u otra.
git diff HEAD
Comparar Commit
- En lugar de usar el final de la rama actual , compara con el final de la rama test
git diff test
- En lugar de comparar con el final de la rama
test
, compará con el final de la actual rama , pero limita la comparación del archivotest
git diff HEAD -- ./test
[HEAD] → En cierto aspecto indica que estamos apuntando al último commit de la rama en la que nos encontremos situado actualmente trabajando.
- Compara la versión del antepenúltimo commit con el último commit
git diff HEAD^ HEAD
- Compara el último commit con 2 commit por debajo del último
git diff HEAD HEAD~2
- Comparar 2 tree : el actual y el anterior tree de commits
git diff HEAD^{tree} HEAD^^{tree}
Ejemplo de ejecución del diff
A continuación se mostrará las diferencias entre los “Patrones de Flujo” de los ficheros que están en el estado {Modified} respeto al estado {UnModified} del {Index/Staging Area}
1.- Creamos un archivo básico con un texto sencillo.
2.- Ejecutamos el comando git status
para que nos muestre el estado del archivos
El archivo ahora mismo está (UnTracked←→Sin Seguimiento) dentro de (Working Directory)
3.- Lanzamos el comando git add <archivo>
para añadir el archivo al estado {Staging Area/Index}
y así confirmar su envió al [Repositorio Local]
3.A - Vemos el estado actual del archivo hello.txt
mediante el comando git status
después de ejecutar el comando git add hello.txt
- En la imagen indica que el archivo que anteriormente estaba (UnTracked←→Sin Seguimiento) ha pasado al estado
Changes to be committed
que significa que necesita realizarle un git commit -m "Mensaje"
para confirmar el registro del archivo y así pasar a una nueva etapa del proceso de guardado del contenido el cual sería {Staging Area/Index} - UnModified
antes de pasar al Repositorio Remoto mediante el comando git push
- Podemos ver en un parte de los mensajes de la terminal que podemos ejecutar el comando
git restore --staged <file> ...
→ Esto significa que podemos volver el archivo al estado (UnTracked←→Sin Seguimiento) dentro de la sección (Working Directory)
- Volvemos a ver el estado del archivo después de ejecutar el comando
git restore --staged <archive>
-
Esta acción se realiza en el caso de que queramos dejar el archivo en el
(UnTracked)
porque realmente no queramos añadirlo al{Staging Area/Index}
-
Se puede leer en la terminal como dice
use git restore --staged <file>... TO UNSTAGE
Estas 2 acciones se pueden repetir las veces que queramos
4.- git commit -m "Mensaje"
→ Confirmamos el archivo creado llamado archivo.txt
para ser enviado al {Staging Area/Index} → UnModified
para ser subido al Repositorio Remoto mediante el comando git push
- Confirmación del archivo
- Ahora el archivo está en el
[Repositorio Local]
preparado para ser enviado al Repositorio Remoto mediante el comando:git push
- Nuevo texto añadido
- Ejecutamos el comando
git status
para ver el estado actual del archivo
- El comando nos informa :
1-. El archivo está en adelante-ahead
de origin/main
para ser confirmado commit
→ Significa que está pendiente de ser enviado al Repositorio Remoto mediante git push
2-. Changes not staged for commit:
→ que significa que hay cambios sin confirmar debido a los últimos cambios realizados dentro del archivo y que no hemos añadido al {Staging Area/Index}
Nos dan 2 opciones :
-
git add <file>
→ Volver a añadir el archivo con los nuevos cambios al {Staging Area/Index} para prepararlo para el próximo commit -
git restore <file>
→ Descartar los cambios que tiene el archivo en el (Working Directory)
-
Al final nos avisa de que los cambios no han sido añadidos
add
o confirmadoscommit
y que lo hagamos mediante. -
git add <archive>
-
git commit -m "Mensaje"
Ejecutamos el comando git diff archivo.txt
y nos mostrará los datos que han cambiado desde el [Repositorio Local] al estado {Staging Area/Index} → Modified
que también coincide con (UnTracked)
porque el archivo con el nuevo cambio está actualmente SIN SEGUIMIENTO-(UnTracked)
en nuestro proyecto
Si ejecutamos el comando git diff HEAD
tendremos el mismo efecto porque ambos muestran las diferencias entre el [Repositorio Local] y la etapa (UnTracked) que coincide con la otra etapa {Staging Area/Index} ya que el archivo fue añadido con git add <archivo>
y confirmado git commit -m "Mensaje"
al [Repositorio Local]
Resumen Simplificado
git diff
→ (Workspace) hasta {Index/Staging Area} → Archivos
git diff <commit or branch>
→ (Workspace) hasta [Repo.Local] → Commits / Ramas
git diff --cached [<commit>]
→ {Index/Staging Area} hasta [Repo.Local] → Archivos / Commits
git diff --staged [<commit>]
→ {Index/Staging Area} hasta [Repo.Local] → Archivos / Commits
git diff <commit-1> <commit-2>
→ Compara ramas del [Repo.Local] → Sólo Commits
git diff HEAD
→ Muestra los cambios en el (Working Directory) con el último commit del [Repo.Local]
Deja un comentario