Git: squash todo luego "extraer" algunos commits

Mis commits de git están un poco desorderados y me preguntaba si podría aplastarlos todos juntos y luego "extraer" algunos commits de ese commit.

Supongamos que tengo estos files en una confirmación: upload.py, moderate.py, upload.html, moderaion.html

¿Cómo puedo dividirlo en dos commits como este? upload: upload.py, upload.html

moderación: moderate.py, moderaion.html

Tu pregunta implica que los commits ya están desorderados, pero si los commits son "atómicos" pero están en el order incorrecto, también puedes usar git rebase –interactive para ponerlos en el order correcto y luego aplastarlos. Esto podría hacer las cosas más fáciles para usted.

Si las confirmaciones ya tocan varias áreas y quieres dividirlas, de nuevo, git rebase -i puede ayudar. También eche un vistazo al ejemplo en el blog de Bart .

Primero puedes aplastar todos los commits junto con git rebase --interactive X (donde X es el padre de los commits que quieres aplastar). Después de eso, ejecuta git rebase --interactive X por segunda vez, pero ahora divide la confirmación aplastada como se describe en el manual de git-rebase .

Antes de comenzar a rebasar, es mejor marcar la confirmación del encabezado actual. Escriba su hash o cree una nueva label / twig. De esta forma, puede revertir fácilmente todos sus cambios y volver a intentarlo.