Si deseas borrar los dos últimos commits del historial del repositorio pero mantener todos los cambios en tu máquina local, puedes usar el siguiente comando:

git reset --soft HEAD~2

Explicación:

  1. HEAD~2 indica que quieres retroceder dos commits desde el commit actual.
  2. La opción -soft asegura que los cambios realizados en esos dos commits se mantendrán en el área de preparación (staging area). Es decir, los archivos no se perderán.

Pasos:

  1. Ejecuta el comando anterior.

  2. Verifica que los cambios están en el área de preparación con:

    git status
    
    
  3. Si no quieres que los cambios estén en el área de preparación, puedes moverlos al área de trabajo con:

    git reset
    
    

    Esto hará que los cambios estén disponibles en tu directorio de trabajo, pero no estarán en el área de preparación.

Nota:

Si los cambios que deseas deshacer incluyen commits realizados desde otro equipo o por otra persona, y esos commits ya se han enviado al repositorio remoto (con git push), entonces simplemente hacer un git reset en tu máquina local no será suficiente para eliminarlos del historial del repositorio remoto.

En este caso, si haces un git reset y luego intentas hacer un git push, Git te mostrará un error porque tu historial local estará desincronizado con el remoto. Para forzar que el historial del repositorio remoto coincida con el de tu máquina local, tendrías que usar el comando:

git push --force

¿Qué pasa si usas git push --force?

  1. Sobrescribirás el historial remoto: Esto significa que los commits eliminados con git reset también desaparecerán del repositorio remoto.
  2. Impacto en otros colaboradores: Si otras personas están trabajando en el mismo repositorio y ya han basado su trabajo en los commits que eliminaste, esto puede causar conflictos y problemas para ellos. Tendrán que realizar un proceso de sincronización manual para alinear su historial con el nuevo historial del repositorio remoto.

Alternativa más segura: git revert