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?
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 comandogit 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 comandogit 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.