¿Cómo puedo fusionar varias confirmaciones en otra rama como una única confirmación aplastada?

Resuelto SunnyShah asked hace 13 años • 15 respuestas

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)?

SunnyShah avatar Mar 15 '11 14:03 SunnyShah
Aceptado

Digamos que se llama a su rama de corrección de errores bugfixy desea fusionarla en master:

git checkout master
git merge --squash bugfix
git commit

Esto tomará todas las confirmaciones de la bugfixrama, las aplastará en 1 confirmación y las fusionará con su masterrama.


Explicación :

git checkout master

Cambia a tu mastersucursal.

git merge --squash bugfix

Toma todas las confirmaciones de la bugfixrama 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 -mpará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.

abyx avatar Mar 15 '2011 08:03 abyx

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/masterporque 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 --squashme 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.

Dan Kohn avatar Aug 19 '2014 15:08 Dan Kohn