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.

Cómo fusionar una rama sin fusionar también los cambios de ramas anteriores

Soy bastante nuevo en git y tengo una pregunta sobre la ramificación y la fusión de estas ramas.

Digamos que en mi repositorio de proyecto tengo 3 ramas “principales”: Alpha, Beta, Producción.

Aquí hay un escenario que estoy enfrentando:

Actualmente trabajo en la rama Alpha en mi máquina local. Creo una nueva rama desde Alpha, llamémosla “feature/newFeature”. Después de crear la función, realizo un commit y envío los cambios, luego fusiono “feature/newFeature” en la rama Alpha para que QA los pruebe. Si QA lo aprueba, entonces se fusiona en Beta, luego en Producción, etc.

Ahora, después de que “feature/newFeature” se haya fusionado en Alpha (y aún no en ninguna otra rama), creo otra rama desde Alpha, la llamo “fix/hotfix”. Después de corregir lo que necesita ser corregido, fusiono esta rama también en Alpha.

Pero (y aquí está el problema que enfrento), digamos que “fix/hotfix” ha sido probado y está funcionando y se puede fusionar en Beta, pero “feature/newFeature” aún se está probando en Alpha. Si intento fusionar la rama “fix/hotfix” en Beta, también fusionará los cambios de la rama “feature/newFeature” en Beta (lo cual obviamente no quiero porque aún se está probando).

Entiendo por qué sucede esto, porque cuando fusiono “feature/newFeature” en Alpha y luego creo la rama “fix/hotfix” desde Alpha después de esa fusión, la rama “fix/hotfix” también contiene los cambios de la rama “feature/newFeature”.

Mi pregunta es: ¿Hay alguna manera de hacerlo de tal manera que pueda fusionar la rama “fix/hotfix” en Beta sin fusionar también las ramas/cambios anteriores que no deben fusionarse aún?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de lograr esto utilizando la función cherry-pick de git. En lugar de fusionar toda la rama fix/hotfix, puedes hacer cherry-pick solo de los commits específicos que contienen la solución del error.

    Para hacer esto, primero identifica el hash del commit que contiene la solución en la rama fix/hotfix. Puedes usar el comando git log para ver una lista de commits y sus hashes correspondientes.

    A continuación, cambia a la rama Beta utilizando el comando git checkout, y luego utiliza el comando git cherry-pick, pasando el hash del commit. Esto aplicará solo los cambios de ese commit específico a la rama Beta, sin traer ningún cambio de otras ramas o commits.

    Es importante tener en cuenta que el uso de cherry-pick puede potencialmente llevar a duplicación de código y conflictos, especialmente si existen dependencias entre commits. Por lo tanto, siempre es mejor fusionar ramas en la secuencia correcta y evitar hacer cherry-pick siempre que sea posible.

Comments are closed.