Master: Es mi rama principal así que contiene el código de producción, aunque puede dividirse en algún punto, al final siempre las demás ramas se conectan con esta.
Development: (o de experimentos) ****es otra rama que se crea en algún punto (versión) de mi rama master para iniciar experimentos o pruebas, por ejemplo probar con otras librerías.
Hotfix: Es una rama creada para la solución de fallas (bugs) dentro de nuestro programa.
Merge: Unión de una rama con la Master.
Sabemos que con Git podemos crear varias versiones de mi archivo y tenerlo de manera controlada. Por defecto nos encontramos en la rama llamada Master y cada vez que hacemos un commit se crea un nueva versión
A partir de alguna de estas versiones yo puedo decidir hacer experimentos para lo cual crearía una nueva rama o Branch (Development), que es completamente diferente en código y contenido, con el fin de probar nuevos ejemplos o librerías y al final si deseo, podría unirlo con mi rama Master.
¿Qué sucede si en algún punto se presenta un bug? Lo que hacemos es iniciar una rama que en el ámbito profesional se le conoce como Hotfix y darle solución para posteriormente hacer un merge con mi rama maestra.
Si he terminado mis experimentos, puedo hacer un merge con mi versión final
Git flow - Guía para manejar ramificaciones:
https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
https://danielkummer.github.io/git-flow-cheatsheet/index.es_ES.html
https://medium.com/@patrickporto/4-branching-workflows-for-git-30d0aaee7bf
Pros y contras: https://www.toptal.com/software/trunk-based-development-git-flow
Por qué no usarlo? https://about.gitlab.com/blog/2020/03/05/what-is-gitlab-flow/
Comparación entre Git flow y Github flow: https://lucamezzalira.com/2014/03/10/git-flow-vs-github-flow/