Squash se compromete en el maestro pero se compromete por separado en la twig de características.

Digamos que estoy trabajando en una function, en una twig llamada foo_baz .

Me comprometo varias veces mientras trabajo en la function.

Periódicamente foo_baz , una twig de seguimiento remoto, a un repository remoto. IE origin/foo_baz .

foo_baz al punto en el que quiero fusionar todas las confirmaciones de foo_baz en master y push en origin/master . Aquí está la pregunta:

¿Puedo fusionar foo_baz en master manera que todos los commits sigan estando separados en la foo_baz de foo_baz , pero que en la historia del master , todos son uno, commits aplastados?

Editar:

Soy un poco principiante, así que por favor, perdónenme si hay algo totalmente obvio que me estoy perdiendo. Busqué en la web pero no pude encontrar una respuesta directa a mi pregunta.

Es posible que esté buscando --squash (como en las otras respuestas), pero podría estar buscando --no-ff lugar.

Aquí está la diferencia entre los dos. Supongamos que comienza con dos commits:

 A --- B <-- branch "master", when you start 

y luego foo_baz dos más en tu nueva sucursal foo_baz :

 A --- B <-- master \ C --- D <-- foo_baz 

Ahora (una vez que regrese al master ), tiene estas dos opciones (entre otras). Puedes git merge --squash foo_baz && git commit que te dará lo siguiente:

 A --- B ----------- E <-- master \ C --- D <-- foo_baz 

o puedes git merge --no-ff :

 A --- B ----------- E <-- "master" after merge --no-ff \ / C --- D <-- foo_baz 

Ambos le otorgan un nuevo compromiso E -en el primer caso, desde el command de git commit separado- pero el primero suprime la acción de varios padres, de modo que al final, cuando mira hacia atrás en esto dentro de un año, parece que acabas de copyr todos los cambios de la twig. El tree (todos los files que obtienes cuando seleccionas las twigs) será el mismo en D y E (en este caso particular, de todos modos, donde no hay cambios en B en el master antes de la acción de fusión), pero están diferentes compromisos.

La diferencia de una git merge recta es que la última generalmente producirá un "avance rápido", que se ve así:

 A --- B \ C --- D <-- foo_baz, master 

donde la línea en ángulo se puede enderezar, dándole un historial donde ambas twigs se ven exactamente iguales.

Creo que lo que quieres es algo como esto:

 git merge --squash foo_baz git commit 

Creo que estás buscando la bandera --squash .