Conceptos clave

HEAD

HEAD es una referencia especial de Git que apunta al commit actual que tienes cargado. Normalmente, cuando estás en una rama, HEAD apunta al commit más reciente de esa rama. Cuando creas un commit nuevo, HEAD avanza automáticamente para apuntar a ese nuevo commit. Cuando restableces la rama a un commit distinto, HEAD se mueve en consecuencia.

Es parecido al concepto de directorio actual en la terminal. Igual que el directorio actual indica dónde estás en el sistema de archivos, HEAD indica dónde estás en el historial de commits de tu repositorio.

Tener un commit actual hace falta para saber qué archivos mostrar en tu directorio de trabajo, dónde añadir commits nuevos, con qué comparar cambios, etc.

Detached HEAD

Si hubiera un premio al peor nombre posible para un concepto, detached HEAD ganaría. Suena a algo roto o peligroso, cuando en realidad es un estado inofensivo que puedes usar para varias cosas.

¡Oh, estoy en estado detached HEAD! ¡Debo de haber roto todo mi repositorio!

Déjame usar otra metáfora para explicar qué significa realmente detached HEAD.


Piensa en una película del Oeste: calor abrasador, gente colocando vías de tren (ramas) por el desierto. Van apareciendo pueblos nuevos (tus commits) a lo largo de la vía según avanza el trabajo. Puedes visitar cualquiera de esos pueblos viajando adelante y atrás por la vía.

Ahora imagina que antes había una vía que llevaba a un pueblo viejo y abandonado. Puede que la vía ya no exista (la rama se eliminó), pero el pueblo sigue ahí (Git conserva todos los commits).

Como ya no hay vías que lleven a ese pueblo antiguo, solo puedes llegar caminando fuera de la vía (cambiando al commit mediante su hash). Cuando llegas, estás en estado detached HEAD.

En este estado puedes explorar el pueblo: mirar alrededor, comparar cosas, revisar el historial. Los pueblos viejos como este suelen estar abandonados por algo, así que no hay demasiado que hacer. Aun así, puedes construir desde ahí: empezar vías nuevas (crear una rama nueva) desde ese pueblo antiguo. Incluso puedes construir un pueblo nuevo (commit nuevo), pero quedará aislado salvo que antes crees una vía nueva (rama nueva).