Por Anónimo (no verificado) , 29 Abril 2026

Sinopsis

git diff [<options>] [<commit>] [--] [<path>...]

Descripción

El comando git diff muestra diferencias entre dos conjuntos de contenido de archivos. Sin argumentos, compara el árbol de trabajo contra el área de staging, mostrando lo que no está staged. Con --cached (o --staged), compara el área de staging contra el último commit. Con uno o dos argumentos de commit, compara esos commits.

Los diffs son centrales para revisión de código, depuración y entender el historial. Git produce diffs unificados por defecto pero también puede mostrar diffs a nivel de palabra, resaltado de movimientos de color y estadísticas. Para archivos binarios, solo se muestra una línea "differ" a menos que se configure un driver de diff binario.

En el uso diario, git diff se integra estrechamente con alias de shell, plugins de editor e integración continua. Los usuarios avanzados a menudo añaden alias que combinan flags que siempre pasan. El formato de salida puede personalizarse vía configuración de Git. Cuando algo sale mal, ejecuta el comando con GIT_TRACE=1 en el entorno para revelar las llamadas plumbing subyacentes.

Entender cómo git diff interactúa con el resto del modelo de datos de Git rinde dividendos. Cada comando opera sobre algún subconjunto de las piezas (objetos, index, refs, árbol de trabajo), y saber cuáles toca ayuda a predecir resultados.

Opciones comunes

OpciónDescripción
--cached / --stagedCompara el index con HEAD en lugar de árbol de trabajo con index.
--statMuestra un resumen de inserciones/eliminaciones por archivo.
--name-onlyLista solo los nombres de archivos que difieren.
--word-diffResalta cambios a nivel de palabra.
-w, --ignore-all-spaceIgnora diferencias de espacios en blanco.
--color-movedResalta bloques de código que fueron movidos.
-U<n>Muestra n líneas de contexto (predeterminado 3).

Ejemplos

git diff
# Cambios no staged en el árbol de trabajo

git diff --cached
# Cambios staged para el próximo commit

git diff main..feature
# Todas las diferencias entre dos branches

git diff HEAD~3 HEAD -- src/
# Últimos tres commits, restringidos a src/

Errores comunes

Olvidar --cached al revisar lo que está a punto de commitearse es una confusión clásica. Otro es usar la sintaxis de rango de dos puntos vs tres puntos incorrectamente: A..B es "diferencias de A a B", mientras que A...B es "diferencias desde la merge base hasta B". Diffs masivos solo de espacios en blanco después de cambios del editor pueden domarse con -w.

Comandos relacionados

git status, git log -p, git show, git range-diff