Ejemplo de git merge con opción squash al integrar una rama con varios commits

Unificando un conjunto de commits al integrarlo en otra rama con squash (aplastar en español)

Contexto

Tenemos una rama principal main
Tenemos una rama en la que estamos trabajando my-feature
en esta disponemos de varios commits (con sus push) que hemos ido haciendo segun ibamos avanzando.
Para el ejemplo, en un archivo php se ha ido agregando lineas

echo "cambio x"
y con cada linea seguidamente se ejecutó un commit y push como backup.
obteniendo algo como:

commit xxx cambio a backup commit yyy cambio b backup ...

Ya hemos acabado con my-feature y nos disponemos a realizar el merge contra main.
La idea es integrar en main un único commit con su mensaje en el que se destaque realmente lo que se ha hecho en la rama my-feature evitando así incluir commits irrelevantes con mensajes que no aportan. (los mensajes: cambio x backup)
Para esto existe git merge --squash

Como lo ejecutamos?

Nos vamos a la rama main (donde vamos a incluir nuestros cambios). Una vez ahí, ejecutamos: git merge --squash my-feature Esto generará un único commit con todos los cambios de la rama my-feature

Después: git commit -m "Este es un mensaje único y final sobre el trabajo en my-feature" Al commit anterior le hemos añadido el mensaje que describe nuestros cambios.

Hacemos git push Con esto hemos acabado de integrar nuestros cambios.

Resultado

Ahora deberiamos ver en main como último commit algo como:

# comando git log commit nmopqreryx Este es un mensaje único y final sobre el trabajo en my-feature commit rrrppxnfsdon Este es un mensaje de otra feature YYYY commit dakfdyer8ereu Este es otro mensaje de otra feature XXX ...

De esta forma conseguimos que nuestra rama principal solo incluya commits únicos de features y que aporten valor.

Autor: Eduardo A. F.
Publicado: 07-01-2023 19:08