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

Sinopsis

git diff-index [--cached] [-p] <tree-ish> [<path>...]

Descripción

El comando git diff-index es el compañero plumbing de git diff. Compara un objeto tree (commit, tag) contra el index o árbol de trabajo. La salida es el formato de diff crudo y legible por máquina, a menos que -p solicite un patch.

La mayoría de usuarios prefieren git diff, que es más fácil de leer. Usa diff-index en scripts donde necesites una comparación estable e inequívoca y no quieras conveniencias de porcelain. Los hooks (especialmente pre-commit) a menudo lo usan para verificaciones precisas.

En el uso diario, este comando se integra estrechamente con alias de shell, plugins de editor e integración continua. Los usuarios avanzados a menudo añaden alias que combinan los 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 para revelar las llamadas plumbing subyacentes.

Entender cómo este comando 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 y a recuperarse de errores.

Cuándo usar

Most users prefer git diff, which is easier to read. Use diff-index in scripts where you need a stable, unambiguous comparison and don't want porcelain conveniences. Hooks (especially pre-commit) often use it for precise checks.

Opciones comunes

OpciónDescripción
--cachedCompare tree to index (instead of working tree).
-pShow patch.
--name-onlyList only changed file names.
--name-statusList names with status letters.
--quietExit nonzero if differences exist; produce no output.
-zNUL-terminated output.

Ejemplos

git diff-index --cached HEAD
# Plumbing equivalent of "git diff --staged"

git diff-index HEAD
# Working tree vs HEAD

git diff-index --quiet HEAD || echo "Repo is dirty"
# Useful test in scripts and hooks

git diff-index --name-only --diff-filter=A HEAD
# List newly added files

Errores comunes

The default raw output isn't patch text — pass -p for that. --quiet sets the exit code rather than printing, which is the opposite of what users sometimes expect from a "diff" command.

Comandos relacionados

git diff, git diff-tree, git status, git ls-files