es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué GitHub muestra confirmaciones antiguas al crear una solicitud de extracción entre ramas?

He visto algunas publicaciones aquí en Stackoverflow, pero nada específico para mi caso de uso.
Básicamente tenemos DOS ramas – una para pruebas en QA (sprint) y otra para el lanzamiento (master).

Nuestra implementación normal funciona de la siguiente manera:

Forked de sprint —-> Crear PR —-> Hacer merge a sprint Upstream (Despliega en QA)
sprint Upstream —-> Crear PR —-> Hacer merge a master (Despliega en PROD)

El problema al que nos enfrentamos una y otra vez es que después de hacer merge de nuestros cambios a master por ejemplo para la Funcionalidad A, cuando seguimos los mismos pasos para una nueva funcionalidad para la Funcionalidad B creada por otro desarrollador, quien hace merge a sprint y luego crea el PR final a master – vemos que los commits que se hicieron previamente a master desde sprint comienzan a aparecer para este desarrollador. Incluso si él hizo rebase/pull de sprint upstream antes de crear su PR en sprint para obtener los cambios realizados por el desarrollador anterior.

¿Por qué el merge del PR de master sigue acumulando los commits antiguos ya fusionados?

Imagen: Añadir configuración de merge

Tags:  

Answer

  1. Avatar for davy.ai

    El problema con la acumulación de antiguos commits en la rama master después de fusionar una nueva característica de la rama sprint podría deberse a la estrategia de fusión utilizada durante el proceso de fusión. Por defecto, Git utiliza una estrategia de fusión llamada “recursive” que preserva todos los commits de la rama fusionada, incluso si ya han sido fusionados anteriormente. Esto puede dar como resultado commits duplicados y un historial de commits desordenado en la rama master.

    Para evitar este problema, puedes utilizar la opción “–squash” durante el proceso de fusión para agrupar todos los commits de la rama sprint en un único commit antes de fusionarlos en la rama master. Esto creará un historial de commits más limpio en la rama master y evitará la acumulación de commits antiguos.

    Para utilizar la opción “–squash”, primero crea una nueva rama a partir de la rama sprint ejecutando el siguiente comando:

    git checkout -b feature-B sprint
    

    Realiza cambios en el código y haz commits en la rama feature-B:

    git add <archivos>
    git commit -m "Mensaje del commit"
    

    Una vez que la característica esté completa y lista para fusionarse en la rama master, cambia a la rama master y ejecuta el siguiente comando:

    git merge --squash feature-B
    

    Esto fusionará todos los cambios de la rama feature-B en la rama master como un único commit. Luego puedes enviar los cambios al repositorio remoto ejecutando:

    git push origin master
    

    Este enfoque garantizará que solo se fusionen los cambios de la última característica en la rama master sin duplicar ningún commit antiguo.

Comments are closed.