Git: cómo fusionar la twig de características, pero excluir algunas confirmaciones?

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