2011-11-21 11 views
23

Duplicar posible:
How can I squash my last X commits together using git?Git: forma más sencilla de aplastar compromete el maestro

tengo un proyecto alojado en GitHub y tengo un clon local. Tengo un montón de pequeñas confirmaciones que ya he enviado a GitHub. Todo esto se ha hecho usando la rama maestra predeterminada *.

Me confundí entre merge --squash y rebase, etc ... ¿Cuál es la forma más sencilla de combinar varias confirmaciones historial en una confirmación para que pase a GitHub?

Respuesta

43

Antes de comenzar, debe asegurarse de que git status esté limpio (es decir, no haya salida de ese comando) para evitar perder trabajo. La forma más sencilla de hacer lo que quiere es probablemente:

git reset --soft <LAST-COMMIT-THAT'S-OK> 
git commit -m 'Many squashed commits' 
git push --force origin master 

Hay que tener en cuenta que esta es la reescritura de la historia (por eso necesita la opción --force a git push) por lo que debe evitar esto si alguien más podría haber clonado o sacado de su repositorio. Para algunos más alternativas, consulte esta pregunta y sus respuestas:

+2

¿Cuáles son las repercusiones de hacer esto si otras ramas tiran regularmente desde el repositorio (avance rápido solamente)? – Gabe

+1

@whoami: Si alguien más tira de esa rama, verán '(actualización forzada)' y git se negarán a actualizar su rama. Luego necesitan (a) asegurarse de que todo su trabajo esté comprometido (b) por lo general sea rebase (por ejemplo, con 'git rebase origin/master') o restablecer su rama a la versión de seguimiento remoto que se acaba de actualizar forzosamente (por ejemplo, con 'git reset --hard origin/master'). A menos que esté feliz explicando a la gente qué hacer, definitivamente es mejor no forzar la historia reescrita. –

+0

Todos verán que sus sucursales locales y el control remoto se han separado y tendrán que fusionar los cambios en lugar de solo avanzar rápidamente. –

Cuestiones relacionadas