Pregunta Cómo usar git merge --squash?


Tengo un servidor remoto de Git, aquí está el escenario que quiero realizar:

  • Para cada error / función, creo una rama diferente de Git

  • Sigo comprometiendo mi código en esa rama de Git con mensajes Git no oficiales

  • En el repositorio superior tenemos que hacer un commit para un error con el mensaje oficial de Git

Entonces, ¿cómo puedo combinar mi me rama en rama a distancia para que puedan obtener un solo comprometen a todos mis registros de entrada (incluso me quiero dar el mensaje del informe para esto)?


763
2018-03-15 07:47


origen


Respuestas:


Digamos que su rama de corrección de errores se llama bugfix y quieres fusionarlo en master:

git checkout master
git merge --squash bugfix
git commit

Esto tomará todos los compromisos del bugfix rama, aplastarlos en 1 compromiso, y combinarlo con su master rama.


Explicación:

git checkout master

Cambia a tu master rama.

git merge --squash bugfix

Toma todos los compromisos del bugfix bifurque y lo fusione con su rama actual.

git commit

Crea una única confirmación a partir de los cambios fusionados.

Omitiendo el -m parámetro le permite modificar un borrador de mensaje de confirmación que contiene cada mensaje de sus confirmaciones aplastadas antes de finalizar su confirmación.


1259
2018-03-15 08:16



Quieres fusionarte con la opción squash. Eso es si quieres hacerlo una rama a la vez.

git merge --squash feature1

Si desea combinar todas las ramas al mismo tiempo que compromete individuales, entonces primero rebase de manera interactiva y aplastar cada característica de combinación de pulpo a continuación:

git checkout feature1
git rebase -i master

Aplaste en una cometa y luego repita para las otras características.

git checkout master
git merge feature1 feature2 feature3 ...

Esa última fusión es una "fusión de pulpos" porque está fusionando muchas ramas a la vez.

Espero que esto ayude


84
2018-03-15 08:08



Lo que finalmente aclaró esto fue una comentario mostrando que:

git checkout main
git merge --squash feature

es el equivalente de hacer:

git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .

Cuando desee fusionar una rama de la característica con 105 (!!) comete y tenerlas todas aplastadas en una sola, yo no quiero git rebase -i origin/master porque necesito resolver por separado los conflictos de fusión para cada de los commits intermedios (o al menos los que git no puede resolver). Utilizando git merge --squash me da el resultado que quiero, de una única confirmación para fusionar una rama de característica completa. Y, solo tengo que hacer como máximo una resolución de conflicto manual.


81
2017-08-19 15:59



Si ya has git merge bugfix en main, puedes aplastar tu compromiso de fusión en uno con:

git reset --soft HEAD^1
git commit

19
2018-03-13 17:50



Unir newFeature rama en master con una confirmación personalizada:

git merge --squash newFeature && git commit -m 'Your custom commit message';

Si en cambio, lo haces

git merge --squash newFeature && git commit

recibirá un mensaje de compromiso que incluirá todo el newFeature commit de rama, que puedes personalizar.


6
2018-03-17 11:10



Para Git

Crea una nueva característica

a través de Terminal / Shell:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

Esto no lo compromete, le permite revisarlo primero.

Luego, confirme y finalice la función de esta nueva rama, y ​​elimine / ignore la anterior (la que usted desarrolló).


0
2017-10-05 14:33