Git fusionar aplanamiento

Si estoy trabajando en múltiples twigs en una sola característica, uso git pull branch1 branch2 branch3 para get todos los cambios en mi twig principal. Sin embargo, todos los loggings de confirmación de cada twig se copyn también. ¿Cómo aplanar el logging de compromiso a un solo post?

Puedes utilizar la rebase interactiva y "aplastar" las confirmaciones; ver también el Tutorial de Git Ready sobre aplastamiento a través de rebase . Lamento arrojar un enlace sobre ti, pero ese es un tutorial bastante completo. Ah, y esto también aplastará sus fusiones sin problemas.

"git merge –squash" (después de "git fetch"; "git pull" es solo fetch + merge, pehaps también permite –squash option) podría ser lo que quieras.

De git-merge (1) :

–squash

Produzca el tree de trabajo y el estado del índice como si se hubiera producido una combinación real, pero no realice un commit o mueva el HEAD, ni registre $GIT_DIR/MERGE_HEAD para hacer que el siguiente command de git commit cree un commit de fusión. Esto le permite crear una única confirmación en la parte superior de la twig actual, cuyo efecto es el mismo que la fusión de otra twig (o más en el caso de un pulpo).

Como Brian White comentó el problema con la git merge --squash es que no le da ningún enlace visible y, por lo tanto, no hay trazabilidad de vuelta a la sucursal (o los cambios individuales) en los que se fusionó.

Visiblemente (cuando se ve como un gráfico git log --graph ), una twig importante que se ha fusionado no se ve diferente a una twig experimental con la que se metió y que felizmente descartaría. Ambas están colgadas allí desconectadas de cualquier cosa. Personalmente, quiero saber que una cierta twig se ha fusionado de nuevo, así que sé que el trabajo está hecho.

Una solución que me funciona es utilizar una combinación con la opción no fastforward.

 git merge --no-ff somebranch -m "my commit message" 

Esto obliga a Git a crear un compromiso único con todos los cambios de twig incluidos, puede establecer el post de compromiso usted mismo (si lo desea) PERO lo más importante, vincula el nuevo compromiso a la twig en la que se fusionó. Esto muestra visiblemente el trabajo en esa twig está completa pero también le permite rastrear hacia atrás para ver detalles de las confirmaciones individuales de la twig fusionada.

Aquí hay un ejemplo en el que las twigs muy simples con una y dos confirmaciones, respectivamente, se fusionaron nuevamente en el maestro. Posteriormente, eliminé las tags de twig en las twigs fusionadas, sin embargo, el nombre de la twig aún se puede ver en el post de confirmación de fusión. El nombre de la sucursal debe resumir los cambios y si desea conocer los cambios exactos que contiene, puede rastrearlos hasta las confirmaciones individuales. Este enfoque parece funcionar muy bien para proyectos simples.

Nota: tuve que dibujar manualmente uno de los conectores, ya que era de un azul oscuro apenas visible.

salida de registro git