Eliminar un Commit con Rebase Interactivo
Para una manipulación más compleja del historial, como eliminar un commit del medio de una rama, puedes usar el rebase interactivo (git rebase -i). Este es un comando muy potente que reescribe el historial de commits, por lo que debe usarse con precaución, especialmente en ramas que se comparten con otros desarrolladores.
Nuestro objetivo es eliminar el commit con el mensaje "fix: Add a temporary file that should be removed". Mirando el log actual, este commit es ahora HEAD~3.
Inicia el proceso de rebase interactivo:
git rebase -i HEAD~4
Este comando abrirá tu editor de texto (vim por defecto) con una lista de los últimos 4 commits.
pick fd5a181 fix: Add a temporary file that should be removed
pick 5f27a4d docs: Update documentation in file1
pick 284be6f chore: Add last-commit file again
pick 8a460c5 Revert "feat: Add file2.txt"
## Rebase 9403080..8a460c5 onto 9403080 (4 commands)
#
## Commands:
## p, pick <commit> = use commit
## d, drop <commit> = remove commit
## ...
Para eliminar el commit, cambia la palabra pick por drop (o d) en la línea que contiene "fix: Add a temporary file that should be removed".
Cambia esto:
pick fd5a181 fix: Add a temporary file that should be removed
Por esto:
drop fd5a181 fix: Add a temporary file that should be removed
En vim, presiona i para entrar en modo de inserción, haz tus cambios, luego presiona Esc para salir del modo de inserción. Guarda y sal escribiendo :wq y presionando Enter. Git reproducirá los commits restantes sobre el nuevo historial.
Verifica el log para ver el resultado:
git log --oneline --graph
El commit "malo" ahora ha desaparecido del historial.
* a5b4c3d (HEAD -> master) chore: Add last-commit file again
* f9e8d7c docs: Update documentation in file1
* 1e2d3f4 Revert "feat: Add file2.txt"
* 5e1a3b2 feat: Add file2.txt
* 1b4c0a9 feat: Add file1.txt
Además, verifica los archivos en el directorio. El archivo bad-commit-file.txt ha sido eliminado.
ls