Estoy usando Git desde hace mucho time, pero hoy tuve un problema con la fusión de algunos cambios de twig a twig. Esta situación que estoy teniendo es que obtuve 4 sucursales: 2 principales y 2 características. Supongamos que se llaman así: main_branch1
, main_branch2
, feature_branch1
y feature_branch2
. Las twigs de características siempre se crean desde main_branch1
y cuando finaliza su trabajo, las main_branch1
nuevamente. Luego, en algún momento, sus cambios se fusionan también con main_branch2
. ¡No hay fusiones entre dos twigs principales! Aquí va el problema. En mi caso en este momento, feature_branch1
se crea desde main_branch1
en algún momento, hizo algunos cambios dentro de él y lo fusionó de nuevo en la twig principal. Luego, creé feature_branch2
nuevamente desde main_branch1
, hice cambios allí también y también los main_branch1
nuevamente. Ahora quiero fusionar feature_branch2
en main_branch2
, pero solo los cambios que tiene, porque cuando lo creé obtuve los cambios de feature_branch1
. Intenté con git rebase
, pero no pude hacer funcionar las cosas y mi tree de trabajo parecía un completo desastre.
Aquí hay un gráfico de lo que quiero lograr y cómo debería verse mi tree:
o---------------o---------------------o main_branch1 \ / \ / o-----------o \ / feature_branch1 \ / \ / o-----------o feature_branch2 \ \ o-----------o main_branch2
Como puede ver cuando creé feature_branch2
, ya obtuve cambios de feature_branch1
, que se fusionaron en main_branch1
. ¿Cómo puedo excluirlos cuando main_branch2
feature_branch2
con main_branch2
? Pero tendré que agregarlos más adelante cuando decida fusionar feature_branch1
en main_branch2
…
¿Alguna idea de cómo puedo hacer eso? ¡Gracias! 🙂
Eche un vistazo a rebase --onto
– le permite rebase, pero le da un poco más de control sobre las confirmaciones específicas involucradas.
git rebase --onto <new_base_branch> <old_base_branch> <branch_to_rebase>
En su caso, el command puede verse algo así como:
git rebase --onto main_branch2 <hash_of_commit_at_base_of_main_branch2> feature_branch2
Esto main_branch2
y uno por uno aplicará los commits de feature_branch2
en la parte superior. A continuación, puede fusionar feature_branch2
en main_branch2
.
¿Es eso lo que quieres lograr? ¡Es difícil saberlo con security sin un diagtwig del estado actual de las sucursales!
Si desea excluir los cambios de feature_branch1
, deberá verificar una nueva twig antes de feature_branch2
y seleccionar las confirmaciones de feature_branch2
luego podrá fusionarlas completamente más tarde.
git checkout -b nofeature1 <SHA before feature_branch1> git cherry-pick <first SHA feature_branch2>^..feature_branch2 git checkout main_branch2 git merge nofeature1