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