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

Cuatro tipos de objetos

Git almacena todo como objetos direccionados por contenido bajo .git/objects. Hay cuatro tipos: blob (contenido de archivo), tree (listado de directorio de blobs y subtrees), commit (puntero de instantánea con autor, committer, mensaje y padres), y tag (tag anotado con firmante y mensaje). Cada uno se nombra por el SHA-1 (o SHA-256) de su contenido.

Inspección

git cat-file -t <sha>
git cat-file -p <sha>
git cat-file -s <sha>
git ls-tree HEAD
git rev-parse HEAD^{tree}

Sueltos vs empaquetados

Los objetos recién creados empiezan sueltos: un archivo comprimido por zlib por objeto bajo .git/objects/xx/yyyy.... La recolección de basura combina luego muchos objetos en un packfile.

Hashing

echo "hello" | git hash-object --stdin
git hash-object -w README.md

Los trees codifican permisos

Una entrada de tree es modo + nombre + sha. Los modos son 040000 (directorio), 100644 (regular), 100755 (ejecutable), 120000 (symlink), 160000 (gitlink/submódulo).

Caminar la historia

git log --raw
git log --pretty=raw
git rev-list --objects HEAD

Alcanzabilidad y poda

Un objeto es alcanzable si alguna ref lleva a él a través del grafo commit-tree-blob. Los objetos no alcanzables son podados por gc tras la ventana de expiración del reflog.

git fsck --unreachable
git gc --prune=now

Transición a SHA-256

Git moderno soporta repositorios SHA-256 (git init --object-format=sha256).

Errores comunes

Editar archivos bajo .git/objects directamente. No lo hagas. Asumir que las colisiones SHA-1 son imposibles — Git incluye detección reforzada por defecto.