Pregunta

Tengo un control remoto de servidor Git, aquí es el escenario que quiero realizar:

  • Para cada fallo/función de crear un Git branch

  • Sigo dedicando mi código en Git branch con onu-oficial de Git mensajes

  • En la parte superior del repositorio tenemos que hacer un commit por un bug con el oficial de Git mensaje

Entonces, ¿cómo puedo combinar mi rama a rama remota de manera que se acaba de cometer uno para todos mis check-ins (incluso me quiere proporcionar mensaje de confirmación para esto)?

¿Fue útil?

Solución

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

git checkout master
git merge --squash bugfix
git commit

Esto tomará todos los compromisos del bugfix ramificarse, aplastarlos en 1 cometer y fusionarlo con su master rama.


Explicación:

git checkout master

Cambia a tu master rama.

git merge --squash bugfix

Toma todos los compromisos del bugfix rama y la fusiona con su rama actual.

git commit

Crea un solo compromiso de los cambios fusionados.

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

Otros consejos

Lo que finalmente me aclaró esto fue un comentario mostrando 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 (!!) Compromisos y hacer que todos se apliquen en uno, no quiero git rebase -i origin/master porque necesito resolver por separado fusionar conflictos para cada de los compromisos intermedios (o al menos los que GIT no pueden darse cuenta). Usando git merge --squash Me consigue el resultado que quiero, de una sola confirmación para fusionar una rama completa de funciones. Y solo necesito hacer como máximo una resolución de conflictos manuales.

Desea fusionar con la opción Squash. Eso es si quieres hacerlo una rama a la vez.

git merge --squash feature1

Si desea fusionar todas las ramas al mismo tiempo que los comodos individuales, primero rebase de manera interactiva y aplasta cada característica, luego Octopus se fusione:

git checkout feature1
git rebase -i master

Aplastar en un solo compromiso 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 pulpo" porque está fusionando muchas ramas a la vez.

Espero que esto ayude

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

git reset --soft HEAD^1
git commit

Unir newFeature ramificarse en master con un confirmación personalizada:

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

Si en su lugar, lo haces

git merge --squash newFeature && git commit

Recibirá un mensaje de confirmación que incluirá todo el newFeature Rama se compromete, que puede personalizar.

Lo explico a fondo aquí: https://youtu.be/fqnaiacelt4

Sé que esta pregunta no es específicamente sobre GitHub, pero dado que GitHub es tan ampliamente utilizado y esta es la respuesta que estaba buscando, la compartiré aquí.

GitHub tiene la capacidad de realizar fusiones de squash, dependiendo de las opciones de fusión habilitadas para el repositorio.

Si se habilitan las fusiones de squash, la opción "Squash and Merge" debe aparecer en el menú desplegable debajo del botón "Fusionar".

Screenshot of "Squash and merge" Github feature

Supongamos que trabajó en Feature/Task1 con múltiples compromisos.

  1. Vaya a su rama de proyecto (proyecto/my_project)

    git checkout project/my_project
    
  2. Cree una nueva rama (Feature/Task1_Bugfix)

    git checkout -b feature/task1_bugfix
    
  3. Marge con el --squash opción

    git merge --squash feature/task1
    
  4. Crear una sola confirmación

    git commit -am "add single comments"
    
  5. Empuja tu rama

    git push --set-upstream origin feature/task1_bugfix
    

Para Git

Crear una nueva función

a través de un Terminal o Shell:

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

Esto no cometer, le permite revisar en primer lugar.

Luego de cometer, y terminar característica de esta nueva rama, y eliminar o ignorar el antiguo (el que hizo dev on).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top