tag - Cómo combinar los compromisos de git en la rama de desarrollo a una rama de función
tipos de etiquetas en git (2)
Tengo una rama de desarrollo y una rama de función en mi repositorio de git. Agregué un compromiso para desarrollar y ahora quiero que ese compromiso se fusione con mi rama de características. Si hago esto
git checkout feature
git merge develop
Termino con un merge commit. Dado que estaré fusionando nuevos compromisos en el desarrollo de mi rama de características con frecuencia, me gustaría evitar todos estos compromisos de fusión innecesarios. Vi una answer que sugería hacer un git rebase develop
pero termina rebobinando demasiado mi rama y la rebase falla.
Actualización: Lo que terminé haciendo fue
git checkout feature
git merge develop # this creates a merge commit that I don''t want
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want
git push
Actualización: Me acabo de dar cuenta de que la confirmación original en el desarrollo tiene un hash diferente cuando fusiono y luego rebase a la rama de características. No creo que eso sea lo que quiero, porque eventualmente fusionaré la característica de nuevo en el desarrollo y supongo que no funcionará bien.
Para integrar una rama en otra, tienes que fusionar o rebase. Debido a que solo es seguro volver a generar las confirmaciones que no están referenciadas en ningún otro lugar (no se combinan con otras sucursales locales, no se envían a ningún control remoto), generalmente es mejor fusionarlas.
Si la rama de tu característica es puramente local, puedes volver a utilizarla para desarrollarla. Sin embargo, lleva tiempo entender cómo funciona el rebase, y antes de que lo haga, es bastante fácil producir compromisos duplicados o eliminados accidentalmente. Las confirmaciones de fusión pueden parecer ruidosas, pero se garantiza que la fusión siempre será segura y predecible.
Para una mejor vista, intente registrar todo junto en un gráfico:
git log --all --graph --oneline --decorate
También vale la pena considerar si realmente necesita las confirmaciones en el develop
fusionado en feature
. A menudo son cosas que pueden dejarse separadas hasta que la feature
se fusione para develop
más tarde.
Si encuentra con regularidad que necesita develop
código en la feature
entonces puede ser una señal de que sus ramas de características son demasiado largas. Lo ideal es que las funciones se dividan de tal manera que se puedan trabajar de forma independiente, sin necesidad de una integración regular en el camino.
Si solo desea una confirmación de la rama develop
, puede seleccionarla en su rama feature
:
git checkout feature
git cherry-pick -x <commit-SHA1>
La confirmación se aplicará como una nueva en la parte superior de su rama (siempre que no genere un conflicto), y cuando vuelva a fusionar la feature
, Git se enfrentará sin conflictos.