Hice un commit e inmediatamente después noté que commiteé cambios que no quiero pushear al remote.
¿Hay alguna manera de deshacer el mismo manteniendo esos cambios en mi copia local para volver a commitearlos correctamente?
Hice un commit e inmediatamente después noté que commiteé cambios que no quiero pushear al remote.
¿Hay alguna manera de deshacer el mismo manteniendo esos cambios en mi copia local para volver a commitearlos correctamente?
Si quieres mantener los cambios:
git reset [--mixed] HEAD~1
Si además no quieres cargarte el commit (sólo mover el head al anterior):
git reset --soft HEAD~1
Y si no quieres mantenerlos (y volver al estado del commit anterior, en la práctica, destruir el último commit completamente como si nunca hubiera existido):
git reset --hard HEAD~1
El comando es git reset <commit>
Para deshacer específicamente el último commit puedes usar HEAD~1
Por ejemplo para volver al commit anterior puedes usar el sgte comando:
git reset HEAD~1
El parámetro --mixed
permite mantener los cambios en el working tree para que puedan ser modificados luego, sin embargo al ser el modo por defecto no es necesario.
En este caso me parece la opción más adecuada ya que quieres corregir el commit así que necesitas revertir el index para corregir los cambios.
Algunos de los parámetros opcionales son:
--soft
no modifica ni el working tree ni el index. Solo cambia el HEAD al commit indicado.--mixed
revierte el index pero no el working tree de modo que se mantienen los cambios listos para ser modificados y posiblemente commiteados de nuevo. Esta es la opción por defecto.--hard
Revierte el index y el working tree de modo que los cambios se pierden totalmente.Puedes revisar la sintaxis completa en git-reset Documentation
$ git reset --soft HEAD~ o $ git reset --soft HEAD~1 #1
// Cambios necesarios // #2
$ git add ... #3
$ git commit ... #4
Simplemente haces un reset soft, con lo que te quedas con los cambios en local pero deshaces el commit, después haces lo que quieras y vuelves a hacer el commit como querías la primera vez.
¿Cómo puedo deshacer el último commit en Git?
Esta es la forma correcta de realizarlo:
$ git reset --soft HEAD~
muy importante, como lo cita otro usuario, esta opción aplica cuando necesitas mantener los cambios.