O Como hacer que lo que hiciste en un sprint entre en master
Tengo mi branch lleno de cambios "muchas_cosas"
$ git checkout muchas_cosas
Me traigo los cambios de master y hago un commit para que mergee lindo (muchas_cosas) $ git merge origin/master
Aca pruebo que siga andando algo!
Miro todos los cambios que hay contra master y analizo en que grupo de cambios quiero dividir los commits. Lo mas importante es pensar que una sola persona pueda entender todos los cambios. Por ejemplo si hay cambios en power y en nvram y en algo de python, es poco probable que haya alguien que se sienta comodo con esas 3 cosas. Entonces mejor separar en 3 grupos, etc.
Para browsear todos los cambios $ git diff muchas_cosas master tambien sirve algo como $ git difftool --tool=meld --dir-diff muchas_cosas master
Cuando ya sabes en que grupos dividir las cosas, generalmente esos grupos contienen distintos archivos, entonces vamos a usar eso para generar commits con los cambios. Podria ser que uno prefiera hacer cherry pick en vez de esto, cualquiera de las dos cosas vale. Lo que suele suceder cuando uno esta laburando en un sprint o algo es que tenes 20 commits tocando 3 lineas de codigo y quizas lo mejor es dejar un solo commit.
Nos vamos a master (master) $ git checkout master
creo un branch para un grupo de cambios saliendo de master
(grupo_a) $ git checkout -b grupo_a
(grupo_a) $ git diff muchas_cosas master path/archivo/con/cambios/en/a.c path/archivo/con/cambios/en/a.h | git apply
El git apply nos deja aplicados los cambios de ese archivo pero no estan agregados vamos a a gregarlos de forma interactiva asi los vamos revisando. Aca se puede querer cortar el commit en dos partes o mas.
(grupo_a) $ git add -p (grupo_a) $ git commit -m "una parte de los cambios en a" (grupo_a) $ git add -p (grupo_a) $ git commit -m "otra parte de los cambios en a"
Abriendo gitk vas eligiendo los commits que queres mergear boton derecho cherry-pick this change.
Y lo mismo que antes pero ambas cosas.
Ahora pushiamos y abrimos MR (grupo_a) # git push --set-upstream origin grupo_a
Vamos a gitlab y abrimos MR o con el cmdline creo que hay una forma
Listo! Ahora es lo mismo con los otros grupos de cambios, $ git checkout master (master) $ git checkout -b grupo_b
y seguimos como antes
Verificamos que no haya quedado nada perdido:
creamos un branch solo a partir de master para probar esto (master) $ git checkout -b terminar_rejunte # mergiamos todos los branches nuevos que hicimos (terminar_rejunte) $ git merge grupo_a (terminar_rejunte) $ git merge grupo_b (terminar_rejunte) $ git merge grupo_c ...
Comparamos contra nuestro branch original lleno de cosas para asegurarnos de no olvidarnos ningun cambio (terminar_rejunte) $ git diff terminar_rejunte muchas_cosas
Deberia dar una salida vacia. Si no da una salida vacia, agregar el cambio en el grupo de cambios adecuado o crear un nuevo grupo con lo que sale de esa salida.
Borramos este branch auxiliar (terminar_rejunte) $ git branch -D terminar_rejunte