Joaquin Martinez

Depura tus errores y construye la mejor versión de ti, cada línea cuenta.

Domina tu historial de Git: Un vistazo a git commit --amend y git reset --soft

03-01-2025
Git y GitHub
Git
Cover Post

Corrigiendo el Historial de Git: git commit –amend y git reset –soft

En el desarrollo de software, es común cometer errores, y los mensajes de commit no son la excepción. A veces, nos damos cuenta de que hemos cometido una falta de ortografía, que el mensaje no es lo suficientemente descriptivo o que nos faltó incluir un archivo en el último commit. Afortunadamente, Git nos ofrece herramientas poderosas para rectificar estos errores sin tener que crear un nuevo commit innecesario.

Este post explora dos comandos esenciales para manipular el historial de Git: git commit –amend y git reset –soft. Aunque ambos permiten corregir un commit, son usados en situaciones distintas y con precauciones diferentes.

  1. El Salvador de los Commits Recientes: git commit –amend
    El comando git commit –amend es ideal para corregir o agregar cambios al commit más reciente. Es la herramienta perfecta cuando acabas de hacer un commit y te das cuenta de un error menor. En lugar de crear un nuevo commit para la corrección, este comando fusiona las modificaciones en el commit anterior, manteniéndo el historial de tu proyecto limpio y conciso.

    Uso práctico:
    Supongamos que hiciste un commit con el mensaje “Instalaciones actualizadas” y tenemos un errore dentro la escritura del mensaje de commit.

    alt text

    alt text

    Para corregir este error, simplemente debemos modificar el commit realizado usando el comando git commit –amend, que nos permitirá modificar el mensaje.

     git commit --amend -m "Instalaciones actualizadas"
    

    El resultado será que el último commit se sobrescribirá con los nuevos cambios y el mensaje corregido. Puedes verificarlo con git log.

    alt text

    alt text

    Este comando es ideal porque mantiene tu historial lineal y fácil de seguir, lo que es una buena práctica en Git.

  2. Deshaciendo Cambios con git reset –soft
    A diferencia de git commit –amend, que solo afecta al último commit, git reset es un comando más potente y flexible. Es útil cuando necesitas deshacer uno o varios commits para volver a un estado anterior y agrupar múltiples cambios en un solo commit.

    La variación –soft es especialmente útil porque no elimina los cambios que realizaste. En cambio, “rebobina” el historial de commits dejando todos los archivos modificados en el staging area, listos para ser re-commitados.

    Uso práctico:
    Imagina que has hecho varias modificaciones y commits pequeños y quieres consolidarlos en uno solo.

    alt text

    alt text

    Y continúas con más modificaciones.

    alt text

    alt text

    En lugar de tener varios commits separados, quieres que formen parte del mismo. Aquí entra git reset –soft HEAD^.

    • HEAD apunta al último commit.
    • ^ indica un commit antes del HEAD.

    Puedes usar ^ varias veces (HEAD^^) o con un número (HEAD~2) para retroceder varios commits a la vez.

     git reset --soft HEAD^
    

    Este comando hará retroceder el HEAD un commit, pero mantendrá los archivos modificados en el staging area.

    alt text

    alt text

    Como se observa, el commit ha sido revertido, pero los cambios en los archivos permanecen. Ahora puedes crear un solo commit con todas las modificaciones.

    alt text

    Cuando ejecutes git log, verás que el último commit ha sido reemplazado por el nuevo.

git commit –amend vs. git reset –soft

Es crucial entender la diferencia entre estas dos herramientas:

  • git commit –amend: Es el comando preferido para corregir un error en el último commit. Es una operación segura y común, ideal para arreglar mensajes o añadir un archivo olvidado.

  • git reset –soft: Es una herramienta más potente que puede reescribir el historial. Aunque es útil para consolidar commits locales, su uso en repositorios compartidos es delicado, ya que puede causar conflictos al sincronizar con otros desarrolladores.

La regla general es que si necesitas corregir solo el último commit en tu rama local, opta por git commit –amend. Si necesitas deshacer o reordenar varios commits, git reset es la opción, pero úsala con precaución.

Post Siguiente

Cómo crear un repositorio de prueba para practicar comandos de git

Post Anterior

Git Diff: Cómo comparar cambios en archivos de tu proyecto