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.

git reset como usar paso a paso

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 resetHEADStaging AreaWorking 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 resetGit revert
Reescribe el historialNo modifica el historial existente
Puede eliminar commitsCrea un nuevo commit que deshace los cambios
Ideal para trabajo localIdeal para proyectos compartidos
Debe utilizarse con cuidado después de un pushEs 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 --hard sin comprender que eliminará los cambios no confirmados.
  • Utilizar git reset después de hacer git push en un repositorio compartido.
  • No revisar el historial con git log antes de realizar el reset.
  • Confundir git reset con git 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 --oneline antes de ejecutar un reset.
  • Comprueba qué cambios tienes pendientes con git status.
  • Utiliza --soft cuando solo quieras reorganizar commits.
  • Emplea --mixed si 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 reset sobre 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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *