ramas - Git fusionar aplanamiento
git commit (3)
Si estoy trabajando en múltiples ramas en una sola característica, uso git pull branch1 branch2 branch3
para obtener todos los cambios en mi rama principal. Sin embargo, todos los registros de confirmación de cada rama se copian también. ¿Cómo aplanar el registro de compromiso a un solo mensaje?
"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 árbol 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 comando de git commit cree un commit de fusión. Esto le permite crear una única confirmación en la parte superior de la rama actual, cuyo efecto es el mismo que la fusión de otra rama (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 rama importante que se ha fusionado no se ve diferente a una rama 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 rama 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 rama incluidos, puede establecer el mensaje de compromiso usted mismo (si lo desea) PERO lo más importante, vincula el nuevo compromiso a la rama en la que se fusionó. Esto muestra visiblemente el trabajo en esa rama está completa pero también le permite rastrear hacia atrás para ver detalles de las confirmaciones individuales de la rama fusionada.
Aquí hay un ejemplo en el que las ramas muy simples con una y dos confirmaciones, respectivamente, se fusionaron nuevamente en el maestro. Posteriormente, eliminé las etiquetas de rama en las ramas fusionadas, sin embargo, el nombre de la rama aún se puede ver en el mensaje 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.
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.