Como Funciona Git - Estructura Interna del Control de Versiones

15 min de lectura | 2025.12.08

Conceptos Basicos de Git

Git es un sistema de control de versiones distribuido. Cada desarrollador tiene una copia completa del repositorio y puede trabajar sin conexion.

Caracteristicas de Git: Gestiona archivos mediante snapshots, registrando el estado completo en lugar de diferencias.

Tipos de Objetos Git

Git gestiona datos con 4 tipos de objetos:

1. Blob (Binary Large Object)

Objeto que almacena el contenido de un archivo. No incluye el nombre del archivo, solo contiene datos puros.

# Verificar objeto blob
git cat-file -p <blob-hash>

2. Tree

Objeto que representa la estructura de directorios. Contiene referencias a blobs u otros trees y nombres de archivos.

3. Commit

Objeto que registra un snapshot:

  • Referencia al tree de nivel superior
  • Referencia al commit padre
  • Informacion del autor y committer
  • Mensaje del commit

4. Tag

Objeto que asigna un nombre a un commit especifico. Se usa para gestionar versiones de lanzamiento.

Hash SHA-1

Todos los objetos se identifican mediante hash SHA-1. El mismo contenido produce el mismo hash, lo que permite eliminar eficientemente datos duplicados.

# Verificar hash de objeto
git hash-object README.md

# Verificar hash de commit
git log --oneline

Como Funcionan las Ramas

Una rama es simplemente un “puntero a un commit”. Crear una nueva rama solo anade un puntero, no copia datos.

# Contenido real de la rama (.git/refs/heads/main)
cat .git/refs/heads/main
# → Se muestra el hash del commit

Que es HEAD: Es un puntero que senala la rama actualmente checked out. Esta registrado en el archivo .git/HEAD.

Tipos de Merge

Merge Fast-forward

Cuando no hay bifurcacion, se completa simplemente avanzando el puntero.

Merge 3-way

Cuando hay bifurcacion, se compara el ancestro comun con ambas ramas y se crea un nuevo commit de merge.

Resumen

Git logra un control de versiones eficiente y confiable utilizando 4 tipos de objetos (blob, tree, commit, tag) y hashes SHA-1. Entender que las ramas son solo punteros hace que las operaciones de Git sean mas intuitivas.

← Volver a la lista