HEAD y Hash en Git: Qué son y cómo utilizarlos
¿Sientes que Git a veces es un misterio? Descubre qué son el HEAD y el Hash, los dos conceptos clave que controlan tu historial y te permiten navegar en el tiempo sin miedo a perder código. ¡Domínalos y lleva tus habilidades al siguiente nivel!

Índice
1. Introducción.
Hasta este punto del curso ya aprendiste a crear un repositorio con git init, agregar archivos al área de preparación con git add, guardar versiones mediante git commit.
Sin embargo, para comprender realmente cómo Git administra las distintas versiones de un proyecto es necesario conocer dos conceptos fundamentales: HEAD y Hash. Ambos están presentes en prácticamente todas las operaciones que realiza Git y entender su funcionamiento te permitirá navegar por el historial, restaurar archivos, volver a versiones anteriores y trabajar con mayor seguridad.
En esta guía aprenderás qué son, para qué sirven, cómo visualizarlos desde Visual Studio Code y algunos ejemplos prácticos de uso.
2. ¿Qué es HEAD en Git?
HEAD es un puntero especial que utiliza Git para indicar en qué versión del proyecto te encuentras trabajando actualmente.
En la mayoría de los casos, HEAD apunta al último commit de la rama activa. Cada vez que realizas un nuevo commit, Git mueve automáticamente este puntero hacia ese nuevo commit.
Podemos imaginarlo como un marcador que señala tu posición actual dentro del historial del repositorio.
Por ejemplo:
Commit A ← Commit B ← Commit C
↑
HEAD
En este caso estás trabajando sobre el commit C, ya que HEAD apunta a él.
2.1. ¿Para qué sirve HEAD?
Git utiliza HEAD constantemente para saber cuál es el estado actual del proyecto.
Gracias a este puntero puedes:
- Saber cuál es el commit actual.
- Restaurar archivos desde la versión actual.
- Comparar cambios con versiones anteriores.
- Cambiar temporalmente a otro commit.
- Crear nuevas ramas desde la posición actual.
- Deshacer cambios utilizando distintos comandos de Git.
En realidad, muchos comandos utilizan HEAD aunque el usuario no lo vea.
3. ¿Qué es un Hash en Git?
Cada vez que realizas un commit, Git genera automáticamente un identificador único, conocido como Hash.
Un hash es una cadena de caracteres alfanuméricos que identifica de forma única un commit dentro del repositorio.
Por ejemplo:
8f5c9d91b2a3fd7b4e4d52d4b7418f6a4f8d3c11
Este código es irrepetible. Aunque dos commits tengan mensajes similares o contengan cambios parecidos, cada uno tendrá un hash diferente.
Es como el documento de identidad de un commit.
3.1. ¿Para qué sirve un Hash?
Los hashes permiten identificar exactamente cualquier versión del proyecto.
Se utilizan para:
- Recuperar commits específicos.
- Comparar versiones.
- Restaurar archivos antiguos.
- Crear ramas desde un commit.
- Volver temporalmente a una versión anterior.
- Revertir cambios.
- Compartir referencias entre desarrolladores.
Gracias a los hashes, Git puede localizar un commit de manera precisa incluso en proyectos con miles de versiones.
4. Diferencia entre HEAD y un Hash
Aunque ambos hacen referencia a commits, no son lo mismo.
| HEAD | Hash |
|---|---|
| Es un puntero. | Es un identificador único. |
| Puede cambiar constantemente. | Nunca cambia. |
| Normalmente apunta al último commit de la rama. | Identifica un commit específico para siempre. |
| Se mueve automáticamente al crear commits. | Permanece igual toda la vida del repositorio. |
Una forma sencilla de entenderlo es la siguiente:
- HEAD indica dónde estás.
- Hash indica qué commit es.
5. ¿Cómo visualizarlos desde la terminal de VS Code?
5.1. Ver el historial completo
Abre la terminal integrada de Visual Studio Code, para ello nos vamos a:
- Terminal → Nueva terminal
- O mediante el atajo correspondiente (Usando las teclas
ctrl + ñ).
Y ejecuta:
git log
Obtendrás un resultado similar a este:
commit 9e3f2b9d8d3e2d5a6f7c8b9d0e1f2a3b4c5d6e7
Author: Juan Pérez
Date: ...
Primer commit
El número largo que aparece después de la palabra commit corresponde al hash.
El primer commit mostrado es el que actualmente está señalado por HEAD.
5.2. Ver un historial resumido
Puedes utilizar:
git log --oneline
Resultado:
9e3f2b9 Primer commit
7fd93ab Agregar estilos
2bc18fa Crear menú
Aquí Git muestra únicamente una versión abreviada del hash.
5.3. Saber dónde apunta HEAD
Puedes ejecutar:
git status
Si estás en la rama principal, Git mostrará algo similar a:
On branch main
nothing to commit, working tree clean
Eso significa que HEAD apunta al último commit de la rama main.
6. ¿Cómo visualizarlos sin usar la terminal?
Visual Studio Code permite consultar esta información mediante su interfaz gráfica.
6.1. Desde Source Control
Abre el panel Source Control.
Desde allí podrás acceder al historial del repositorio (dependiendo de la versión de VS Code o de las extensiones instaladas, como Git Graph o GitLens) y ver los commits recientes.
Cada commit mostrará:
- Su mensaje.
- El autor.
- La fecha.
- Su hash abreviado.
El commit superior corresponde al que actualmente apunta HEAD.
6.2. Desde la Línea de tiempo (Timeline)
Si seleccionas un archivo en el Explorador de VS Code y luego abres la sección Timeline, podrás visualizar todos los commits que modificaron ese archivo.
Cada uno incluye su hash abreviado y permite revisar los cambios realizados.
7. Ejemplos prácticos de uso de HEAD
7.1. Restaurar un archivo al último commit
git restore --source=HEAD index.html
Git recupera la versión del archivo existente en el commit actual.
7.2. Volver temporalmente al commit anterior
git checkout HEAD~1
Git cambia temporalmente al commit anterior.
7.3. Comparar el trabajo actual con el último commit
git diff HEAD
Muestra todas las diferencias entre el directorio de trabajo y el commit actual.
7.4. Comparar con dos commits atrás
git diff HEAD~2
Git compara el estado actual con el commit ubicado dos posiciones antes.
8. Ejemplos prácticos utilizando un Hash
8.1. Restaurar un archivo desde un commit específico
git restore --source=8f5c9d9 index.html
Git recupera la versión del archivo correspondiente a ese commit.
8.2. Cambiar temporalmente a un commit
git checkout 8f5c9d9
Permite revisar cómo era el proyecto en ese momento del historial.
8.3. Comparar dos commits
git diff 8f5c9d9 a74d281
Git mostrará todas las diferencias entre ambos commits.
8.4. Crear una nueva rama desde un commit
git checkout -b nueva-rama 8f5c9d9
La nueva rama comenzará exactamente desde ese commit.
9. Buenas prácticas al trabajar con HEAD y Hash
Para aprovechar al máximo estas herramientas, es recomendable:
- Utilizar
git log --onelinepara localizar rápidamente un hash. - Copiar únicamente los primeros caracteres del hash cuando Git los acepte, ya que normalmente son suficientes para identificar un commit.
- Verificar siempre en qué rama te encuentras antes de cambiar de commit.
- Comprender que
HEADcambia automáticamente al realizar nuevos commits. - Evitar memorizar hashes; utiliza
git logcuando necesites consultarlos.
9.1. Errores comunes
Al comenzar a trabajar con Git es frecuente cometer algunos errores relacionados con HEAD y los hashes:
- Pensar que
HEADes un commit. En realidad, es un puntero que apunta a un commit. - Creer que el hash cambia con el tiempo. Cada commit conserva su hash para siempre.
- Confundir un hash abreviado con un hash completo. Ambos representan el mismo commit.
- Intentar recordar hashes de memoria en lugar de consultarlos con
git log. - Modificar archivos mientras se está revisando un commit antiguo sin comprender el estado en el que se encuentra el repositorio.
10. Resumen
HEAD y los hashes son dos conceptos fundamentales de Git. Mientras que HEAD indica la posición actual dentro del historial del repositorio, el hash identifica de forma única cada commit realizado.
Comprender cómo funcionan te permitirá utilizar con mayor confianza comandos como git restore, git checkout, git reset, git revert y git diff, además de navegar por el historial del proyecto y recuperar versiones específicas cuando sea necesario.
