Git reset: Qué es, para qué sirve y cómo usarlo
Git reset es uno de los comandos más potentes de Git para deshacer cambios y reorganizar el historial de un repositorio. En esta guía aprenderás qué es, para qué sirve, cómo utilizar sus diferentes variantes y en qué situaciones conviene aplicarlo mediante ejemplos prácticos paso a paso.

Índice
1. Introducción a Git reset
A medida que aprendes Git, vas incorporando nuevos comandos que te permiten gestionar el historial de un proyecto de forma cada vez más eficiente.
Hasta aquí ya vimos cómo instalar Git, como crear un repositorio con git init, consultar el estado del proyecto con git status, agregar archivos al área de preparación mediante git add, guardar versiones utilizando git commit y revisar el historial con git log.
Sin embargo, en algún momento es normal cometer errores. Tal vez realizaste un commit demasiado pronto, agregaste archivos que no debías o simplemente deseas volver a un estado anterior del proyecto.
Es precisamente aquí donde entra en juego Git reset, uno de los comandos más potentes de Git y también uno de los que más dudas genera entre quienes están empezando.
En este artículo aprenderás qué es git reset, cómo funciona internamente, cuáles son sus diferentes modos de uso, cuándo conviene utilizarlo y cómo hacerlo tanto desde la terminal de Visual Studio Code como mediante la interfaz gráfica.
2. ¿Qué es Git reset?
git reset es un comando que permite mover el puntero HEAD a otro commit y modificar el estado del repositorio, pudiendo afectar también el área de preparación (Staging Area) e incluso el directorio de trabajo (Working Directory), dependiendo del modo utilizado.
En otras palabras, Git reset sirve para deshacer cambios o retroceder a un commit anterior.
2.1. ¿Para qué sirve?
Las situaciones más habituales son:
- Deshacer un commit realizado por error.
- Eliminar uno o varios commits recientes.
- Sacar archivos del área de preparación.
- Volver temporalmente a un estado anterior del proyecto.
- Corregir un commit antes de compartirlo con otros desarrolladores.
- Limpiar cambios locales antes de continuar trabajando.
Es importante recordar que Git reset está pensado principalmente para trabajar con commits locales. Si esos commits ya fueron enviados al repositorio re
2.2. ¿Qué significa «resetear» un repositorio?
Cuando hablamos de hacer un reset, realmente estamos diciendo que Git moverá la referencia HEAD hacia otro commit.
Dependiendo del modo utilizado, Git puede modificar:
- El historial (HEAD).
- El área de preparación (Staging Area).
- El directorio de trabajo (Working Directory).
No siempre modifica las tres áreas.
Precisamente por eso existen distintos tipos de git reset.
moto mediante git push, normalmente resulta más recomendable utilizar git revert.
3. ¿Cómo funciona internamente?
Para comprender Git reset conviene recordar las tres áreas principales de Git:
- Working Directory
- Staging Area
- Repositorio (HEAD)
Cuando ejecutas un reset, Git puede modificar una, dos o las tres áreas. Dependiendo del modo utilizado:
| Tipo de reset | HEAD | Staging Area | Working Directory |
|---|---|---|---|
| –soft | ✅ | ❌ | ❌ |
| –mixed | ✅ | ✅ | ❌ |
| –hard | ✅ | ✅ | ✅ |
Esta es la diferencia fundamental entre cada variante.
3.1. Git reset mueve el HEAD
Siempre que utilizas Git reset, Git mueve el puntero HEAD hacia otro commit.
Por ejemplo:
Commit A
Commit B
Commit C ← HEAD
Si ejecutas:
git reset HEAD~1
El resultado será:
Commit A
Commit B ← HEAD
Commit C
Ahora el commit C deja de ser el commit actual.
4. Cómo usarlo desde la terminal de VS Code
Primero veamos su sontaxis:
4.1. Sintaxis de Git reset
La sintaxis general es:
git reset [opciones] <commit>Lenguaje del código: HTML, XML (xml)
Por ejemplo:
git reset HEAD~1
git reset --soft HEAD~2
git reset --hard 7bc8d31
Ahora bien, veamos su procedimiento paso a paso:
Paso 1
Abrir el proyecto en VS Code.
Paso 2
Abrir la terminal integrada.
Terminal → New TerminalLenguaje del código: PHP (php)
Paso 3
Consultar el historial.
git log --oneline
Ejemplo:
7bc8d31 Agregué formulario
54ae882 Mejoré estilos
81d4c33 Proyecto inicial
Paso 4
Elegir el commit al que deseas volver.
Paso 5
Ejecutar Git reset.
Por ejemplo:
git reset --soft HEAD~1
o
git reset --mixed HEAD~1
o
git reset --hard HEAD~1
5. Cómo usarlo sin utilizar la terminal
Visual Studio Code permite realizar muchas operaciones de Git mediante la interfaz gráfica.
Por ejemplo, puedes:
- Ver el historial.
- Comparar cambios.
- Crear commits.
- Hacer checkout de ramas.
- Sincronizar con GitHub.
Sin embargo, Git reset no dispone de una interfaz completa en la instalación estándar de Visual Studio Code.
Para utilizar todas las variantes de git reset normalmente existen dos opciones:
- utilizar la terminal integrada;
- instalar extensiones como GitLens u otras herramientas que incorporan esta funcionalidad.
Aun así, incluso quienes trabajan con interfaz gráfica suelen ejecutar git reset desde la terminal, ya que resulta más rápido y ofrece un control mucho mayor.
6. Diferentes formas de usar Git reset
6.1. Git reset –soft
git reset --soft es la variante menos agresiva de Git reset. Su función principal es mover el puntero HEAD a un commit anterior sin modificar el área de preparación (Staging Area) ni el directorio de trabajo (Working Directory).
Esto significa que Git elimina el o los commits seleccionados del historial, pero conserva todos los cambios exactamente como estaban antes del reset. Incluso los archivos continúan en el Staging Area, listos para volver a crear un commit.
Este modo es especialmente útil cuando realizaste un commit demasiado pronto o cuando deseas modificar el mensaje del último commit, agregar algún archivo que olvidaste incluir o combinar varios commits en uno solo sin perder el trabajo realizado.
6.1.1. ¿Qué modifica Git?
| Área | ¿Se modifica? |
|---|---|
| HEAD | ✅ Sí |
| Staging Area | ❌ No |
| Working Directory | ❌ No |
6.1.2. Sintaxis
git reset --soft HEAD~1
6.1.3. ¿Qué ocurre?
Supongamos el siguiente historial:
A → B → C (HEAD)
Al ejecutar:
git reset --soft HEAD~1
El resultado será:
A → B (HEAD)
El commit C desaparece del historial, pero todos los cambios que contenía siguen preparados (staged) para crear un nuevo commit.
6.1.4. ¿Cuándo utilizarlo?
Es recomendable utilizar --soft cuando:
- Quieres modificar el mensaje del último commit.
- Olvidaste agregar uno o varios archivos antes de hacer el commit.
- Deseas combinar varios commits en uno solo.
- Necesitas reorganizar el historial sin perder cambios.
6.2. Git reset –mixed
git reset --mixed es el modo predeterminado de Git reset. Si ejecutas simplemente git reset, Git utilizará automáticamente esta opción.
En este caso, Git mueve el puntero HEAD al commit indicado y además vacía el área de preparación (Staging Area). Sin embargo, los archivos modificados permanecen intactos en el Working Directory, por lo que no se pierde ningún cambio realizado.
En otras palabras, los cambios dejan de estar preparados para el próximo commit y vuelven a aparecer como archivos modificados. Esto te permite revisar el código, editarlo nuevamente o seleccionar únicamente algunos archivos antes de volver a ejecutar git add.
6.2.1. ¿Qué modifica Git?
| Área | ¿Se modifica? |
|---|---|
| HEAD | ✅ Sí |
| Staging Area | ✅ Sí |
| Working Directory | ❌ No |
6.2.2. Sintaxis
git reset --mixed HEAD~1
o simplemente:
git reset HEAD~1
6.2.3. ¿Qué ocurre?
Antes del reset:
A → B → C (HEAD)
Después de ejecutar:
git reset HEAD~1
Obtendrás:
A → B (HEAD)
Los cambios del commit C seguirán existiendo en tu proyecto, pero ya no estarán preparados para el siguiente commit.
6.2.4. ¿Cuándo utilizarlo?
git reset --mixed suele utilizarse cuando:
- Quieres rehacer el último commit.
- Agregaste archivos al Staging Area por error.
- Deseas revisar nuevamente qué archivos vas a incluir en el próximo commit.
- Necesitas modificar parte de los cambios antes de volver a confirmarlos.
Es, probablemente, el modo de git reset que más utilizan los desarrolladores en su trabajo diario.
6.3. Git reset –hard
git reset --hard es la variante más potente y también la más peligrosa de Git reset. Además de mover el puntero HEAD, Git elimina el contenido del Staging Area y restaura el Working Directory exactamente al estado en el que se encontraba el commit seleccionado.
Esto significa que todos los cambios realizados después de ese commit desaparecerán, incluso aquellos que nunca llegaron a convertirse en un commit.
Por este motivo, debe utilizarse únicamente cuando estés completamente seguro de que ya no necesitas conservar esos cambios.
6.3.1. ¿Qué modifica Git?
| Área | ¿Se modifica? |
|---|---|
| HEAD | ✅ Sí |
| Staging Area | ✅ Sí |
| Working Directory | ✅ Sí |
6.3.2. Sintaxis
git reset --hard HEAD~1
También puedes volver a un commit específico utilizando su hash:
git reset --hard 7bc8d31
6.3.3. ¿Qué ocurre?
Antes del reset:
A → B → C (HEAD)
Después de ejecutar:
git reset --hard HEAD~1
El historial queda así:
A → B (HEAD)
Además, todos los cambios que existían en el commit C desaparecen tanto del historial como de tu directorio de trabajo.
6.3.4. ¿Cuándo utilizarlo?
Este modo suele utilizarse cuando:
- Quieres descartar completamente todos los cambios recientes.
- Necesitas volver a una versión anterior del proyecto.
- Estás realizando pruebas y deseas recuperar rápidamente el último estado estable.
- Quieres sincronizar tu repositorio local con un commit específico eliminando cualquier modificación pendiente.
⚠️ Importante: Antes de utilizar git reset --hard, asegúrate de que realmente no necesitas los cambios actuales. Una vez ejecutado, recuperar esos cambios puede ser difícil o incluso imposible si no existen referencias en el historial o en el reflog. Por ello, se recomienda usar este comando con mucha precaución, especialmente en proyectos importantes o colaborativos.
7. Ejemplos de usos comunes:
7.1. Ejemplo práctico: Corregir el último commit
Supongamos que tienes el siguiente proyecto:
mi-proyecto
│
├── index.html
├── estilos.css
└── script.jsLenguaje del código: CSS (css)
El contenido de index.html es:
<h1>Mi sitio web</h1>Lenguaje del código: HTML, XML (xml)
Realizas un commit.
git add .
git commit -m "Versión inicial"Lenguaje del código: JavaScript (javascript)
Posteriormente modificas el archivo.
<h1>Mi sitio web</h1>
<p>Bienvenidos al curso de Git.</p>Lenguaje del código: HTML, XML (xml)
Guardas nuevamente.
git add .
git commit -m "Agregué un párrafo"Lenguaje del código: JavaScript (javascript)
Pero inmediatamente notas que olvidaste añadir una imagen y prefieres incluir ambos cambios en un único commit.
En lugar de crear otro commit, ejecutas:
git reset --soft HEAD~1
¿Qué ocurre?
- El último commit desaparece del historial.
- Los cambios siguen estando preparados en el Staging Area.
- Puedes continuar editando los archivos.
Ahora agregas la imagen.
<img src="logo.png" alt="Logo">
<p>Bienvenidos al curso de Git.</p>Lenguaje del código: HTML, XML (xml)
Preparas todo nuevamente (si es necesario) y creas un único commit más completo.
git commit -m "Agregué el párrafo y el logotipo"Lenguaje del código: JavaScript (javascript)
El historial queda mucho más limpio.
7.2. Otro ejemplo práctico: sacar archivos del Staging Area
Supongamos que ejecutaste:
git add .
Pero agregaste archivos por error.
Puedes usar:
git reset
Git quitará los archivos del área de preparación.
Los cambios no se perderán.
Simplemente volverán al Working Directory.
Es uno de los usos más frecuentes de Git reset durante el desarrollo diario.
7.3. ¿Cuándo conviene utilizar Git reset?
Git reset suele utilizarse cuando:
- El commit todavía no fue enviado al repositorio remoto.
- Quieres reorganizar tu historial local.
- Necesitas corregir un commit reciente.
- Deseas deshacer varios commits.
- Agregaste archivos al Staging Area por equivocación.
8. Git reset vs Git revert
Es muy habitual confundir ambos comandos.
| Git reset | Git revert |
|---|---|
| Reescribe el historial | No modifica el historial existente |
| Puede eliminar commits | Crea un nuevo commit que deshace los cambios |
| Ideal para trabajo local | Ideal para proyectos compartidos |
| Debe utilizarse con cuidado después de un push | Es completamente seguro después de un push |
Como regla general:
- Si el commit todavía no fue compartido, normalmente puedes utilizar
git reset. - Si el commit ya fue enviado al repositorio remoto, suele ser más recomendable utilizar
git revert, ya que mantiene intacto el historial compartido.
9. Errores comunes
Estos son algunos errores frecuentes entre quienes comienzan a utilizar este comando:
- Ejecutar
git reset --hardsin comprender que eliminará los cambios no confirmados. - Utilizar
git resetdespués de hacergit pushen un repositorio compartido. - No revisar el historial con
git logantes de realizar el reset. - Confundir
git resetcongit restore. - Pensar que todos los tipos de reset eliminan archivos, cuando en realidad cada modo afecta áreas distintas del repositorio.
10. Buenas prácticas
Para trabajar de forma segura con este comando, es recomendable seguir estas prácticas:
- Revisa siempre el historial con
git log --onelineantes de ejecutar un reset. - Comprueba qué cambios tienes pendientes con
git status. - Utiliza
--softcuando solo quieras reorganizar commits. - Emplea
--mixedsi necesitas volver a preparar los cambios manualmente. - Reserva
--hardúnicamente para situaciones en las que estés seguro de que no necesitas conservar los cambios descartados. - Evita usar
git resetsobre commits que ya hayan sido compartidos con otros colaboradores.
11. Resumen
Git reset es una de las herramientas más importantes de Git para deshacer cambios y reorganizar el historial local de un proyecto. Aunque puede parecer un comando complejo al principio, comprender cómo afecta al HEAD, al Staging Area y al Working Directory permite utilizarlo con seguridad.
Dominar las diferencias entre --soft, --mixed y --hard te ayudará a corregir errores, mantener un historial limpio y trabajar de forma mucho más eficiente. Una vez entiendas el funcionamiento de cada modo, Git reset se convertirá en una herramienta imprescindible dentro de tu flujo de trabajo diario.
