26.7.17

Git: Cómo unir los X últimos commits en uno solo

El comando git reset reinicia el estado de HEAD a un commit anterior. El siguiente comando une los últimos tres commits y se prepara para hacer commit de ello:

$ git reset --soft HEAD~3
$ git commit

git reset necesita al menos dos argumentos: el modo con el que se va a volver a X commit y el commit al que se va a regresar. --soft "limpia" los últimos commits y deja los archivos actuales (working tree) como una combinación de esos últimos commits, exactamente como están actualmente. HEAD~3 indica cuantos commits volver, en este caso tres. Luego se guardan los cambios con git commit y se escribe un mensaje.

De esta forma los mensajes escritos en los commits que se van a unir no se agregan al nuevo commit. Si se necesita esta información, antes de hacer git reset se puede usar git log --format=%B -n 3 para imprimir únicamente los mensajes de los últimos tres commits (se puede agregar --reverse).

Más: Squash my last X commits together using Git. git reset --soft. git log --format. Git revisions (refnames) in the form: refname@{n}, e.g. master@{1}. Difference between HEAD, Working Tree and Index in Git.