Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

Git dice “index file corrupt”: demuestra qué índice falló antes de borrarlo

El índice de staging, el de un linked worktree, un índice split/sparse y un .idx de pack son fallos distintos. Conserva el registro staged legible, resuelve la ruta real, reconstruye solo esa clase y verifica objetos y recurrencia.

Diagrama que distingue índices worktree, split/sparse y pack
Ilustración original: clasifica el índice exacto antes de reparar. Watch at Ease

El índice de staging, el de un linked worktree, un índice split/sparse y un .idx de pack son fallos distintos. Conserva el registro staged legible, resuelve la ruta real, reconstruye solo esa clase y verifica objetos y recurrencia.

El índice del worktree registra entradas staged y es distinto de la base de objetos. .git puede ser un archivo que apunta al gitdir real; .git/index no es universal.

1. Congela la ruta exacta y conserva evidencia staged

Guarda error, directorio, comando y hora. Si el index aún se lee, exporta git diff --cached --binary y git ls-files --stage, y copia el archivo nombrado antes de reset. La versión staged puede diferir del working tree.

No empieces con rm -f .git/index. El error puede señalar otro worktree u objects/pack/*.idx, y borrar elimina evidencia de la intención staged.

2. Resuelve gitdir, worktree e identidad del index

En el mismo shell ejecuta git rev-parse --show-toplevel, --git-dir, --git-common-dir y --git-path index. Un archivo .git puede redirigir y un linked worktree guarda estado privado fuera de la raíz visible.

Registra GIT_DIR, GIT_WORK_TREE y GIT_INDEX_FILE. Si la ruta del error no coincide con el index resuelto, detén la receta genérica y clasifica el archivo nombrado.

3. Distingue worktree, split/sparse y pack index

El index normal es el registro de staging. Split index añade sharedindex.<hash>; sparse checkout usa bits skip-worktree y puede usar sparse index. Conserva la configuración y git sparse-checkout list.

Un .idx bajo objects/pack indexa objetos del pack. Borrar el staging index no lo repara. Protege el par del pack, verifica objetos y usa recuperación del almacén o un clone nuevo.

4. Reconstruye solo la clase demostrada

Si demuestras que el worktree index está corrupto, muévelo en vez de borrarlo y ejecuta git reset --mixed desde el worktree correcto para reconstruirlo desde HEAD. Los archivos quedan, pero se pierde staging; restaura con la evidencia guardada.

Para split/sparse, restaura la configuración sparse-checkout soportada y reapply después de que el index base sea legible. No borres sharedindex ni desactives sparse solo para que status funcione.

5. Verifica objetos, intención staged y recurrencia

Ejecuta git status, git diff, git diff --cached y git fsck --full. Comprueba commits, trees, blobs, archivos nuevos y hunks solo staged.

Repite el status, checkout o CI original en el mismo filesystem, worktree y sandbox. Si reaparece, investiga almacenamiento, terminación abrupta, writers simultáneos, antivirus u overlay.

Diagrama de captura, reconstrucción dirigida y aceptación
Ilustración original: conserva evidencia staged, cambia una clase y verifica. Watch at Ease