Tienes que hacer una rebase interactiva. Lea la página de ayuda de git rebase para más detalles. La respuesta corta es que continuará y realizará los cambios "intermedios" como de costumbre, y luego ejecutará git rebase -i HEAD~4
. Aparecerá una lista de los últimos 3 commit en un editor de texto. Simplemente reordenar las confirmaciones donde la confirmación más nueva se coloca en el medio, y luego guardar y salir del editor. Git intentará reconstruir el historial en el nuevo orden. Puede terminar con conflictos. Si es así, corrígelos como lo harías para un conflicto de combinación y luego ejecuta git rebase --continue
después de que todos hayan sido arreglados y agregados. Te dice todo esto cuando tienes un conflicto, así que solo lee los mensajes de error y estarás bien.
EDITAR: en realidad, parece que desea editar una confirmación existente. En ese caso, cuando el editor aparece, mover comprometen su nuevo temporal para estar al lado de commit3 y luego cambiar el orden de "calabaza" de "recoger":
pick 123456 commit3
squash 541343 tmpcommit
pick 654321 commit2
pick 431523 commit1
Edit2: si la rama y commit1, commit2 y commit3 ya son públicos, entonces no debería volver a basarse. Por otra parte, no deberías modificar los commits de todos modos, por lo que toda la pregunta sería discutible. Estoy asumiendo que esta es una rama privada o una que otros esperan que se vuelva a configurar y se rebobine.
Ver también http://stackoverflow.com/questions/179123/how-do-i-edit-an-incorrect-commit-message-in-git –