¿Cómo puedo fusionar varias confirmaciones en otra rama como una única confirmación aplastada?
Tengo un servidor Git remoto, este es el escenario que quiero realizar:
Para cada error/característica creo una rama de Git diferente
Sigo enviando mi código en esa rama de Git con mensajes de Git no oficiales
En el repositorio superior tenemos que hacer una confirmación por un error con el mensaje oficial de Git.
Entonces, ¿cómo puedo fusionar mi sucursal con una sucursal remota para que obtengan solo una confirmación para todos mis registros (incluso quiero proporcionar un mensaje de confirmación para esto)?
Digamos que se llama a su rama de corrección de errores bugfix
y desea fusionarla en master
:
git checkout master
git merge --squash bugfix
git commit
Esto tomará todas las confirmaciones de la bugfix
rama, las aplastará en 1 confirmación y las fusionará con su master
rama.
Explicación :
git checkout master
Cambia a tu master
sucursal.
git merge --squash bugfix
Toma todas las confirmaciones de la bugfix
rama y las agrupa para una confirmación 1 con su rama actual.
(no aparece ninguna confirmación de fusión; puede resolver los conflictos manualmente antes de seguir la confirmación)
git commit
Crea una confirmación única a partir de los cambios combinados.
Omitir el -m
parámetro le permite modificar un borrador de mensaje de confirmación que contiene todos los mensajes de sus confirmaciones aplastadas antes de finalizar su confirmación.
Lo que finalmente me aclaró esto fue un comentario que muestra que:
git checkout main
git merge --squash feature
es el equivalente a hacer:
git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .
Cuando quiero fusionar una rama de características con 105(!!) confirmaciones y agruparlas todas en una, no quiero hacerlo git rebase -i origin/master
porque necesito resolver por separado los conflictos de fusión para cada una de las confirmaciones intermedias (o al menos las que git no puede entenderse por sí solo). El uso git merge --squash
me da el resultado que quiero, de una única confirmación para fusionar una rama de características completa. Y solo necesito hacer como máximo una resolución manual de conflictos.