Git Flow Workflow
Gitflow es una extensión de Git. Es un workflow de flujo de desarrollo de software para Git.
Cualquier equipo puede tener su workflow específico siempre que todos lo conozcan. Gitflow es un workflow que es una propuesta ya consolidada en equipos grandes que funciona bien, entonces no vamos a reinventar la rueda.
Sería una metodología de ramificación para ofrecer una estructura robusta y gestión de proyectos mayores.
Se puede aplicar un gitflow sin ninguna extensión siempre que se conozca la secuencia, pero las funcionalidades de la extensión facilitan el trabajo.
Se atribuyen funciones específicas a diferentes ramas y define cuándo deben interactuar. Además de las ramificaciones de recursos, utiliza ramificaciones individuales para preparar, mantener y registrar lanzamientos.
Gitflow es una idea de flujo de trabajo Git. Esto significa que dicta qué tipos de ramificaciones configurar y cómo hacer la fusión.
Instalación
En windows instala git normalmente que flow ya está incluido.
# Linux ubuntu
sudo apt-get install git-flow
# Mac
brew install git-flow
Auto completar
Para usar con bash solo necesitas
sudo apt-get install git bash-completion -y
Para zsh y oh my zsh
wget -O https://sourceforge.net/p/zsh/code/ci/master/tree/Completion/Unix/Command/_git\?format\=raw > _gitflow.zsh
mv _gitflow.zsh ~/.oh-my-zsh/completions/_gitflow.zsh
source ~/.zshrc
Comando flow Init
git flow init
Es una extensión del comando estándar para inicializar un repositorio local git init. No altera nada en el repositorio, excepto crear las ramificaciones para ti.

Rama principal (main) y de desarrollo (develop) En lugar de una única rama main, este flujo de trabajo usa dos ramas para registrar el historial del proyecto. La rama main almacena el historial del lanzamiento oficial, y la rama develop sirve como una ramificación de integración para recursos. También es conveniente marcar todas las confirmaciones en la rama main con un número de versión usando una etiqueta.
Lo primero es crear una rama develop con los comandos.
# crea la rama localmente
git branch develop
# sube la rama
git push -u origin develop
Si un proyecto ya fue creado con una rama develop en el repositorio no es necesario el comando anterior.
Una buena práctica en todo proyecto es crear una rama develop en todos los proyectos.
Esta rama develop va a contener el historial completo del proyecto, mientras que la rama main, la principal, va a contener una versión abreviada. Otros desarrolladores ahora van a necesitar clonar el repositorio y crear una ramificación de seguimiento para develop.
Al utilizar la biblioteca de extensión de git-flow, ejecutar git flow init en el repositorio existente va a crear una ramificación de desarrollo:
git flow init
Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master] main
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
Mira la salida
git branch
develop
main
Ramas de Features
Cada nueva feature debe residir en su propia ramificación, la cual puede ser enviada por push al repositorio del proyecto. Sin embargo, en lugar de ser ramificaciones de la rama main (principal), las ramificaciones de features usan la rama develop (desarrollo) más reciente como ramificación padre. Cuando un recurso se completa, se fusiona de vuelta en la rama develop. Las features nunca deben interactuar con la rama main.
para iniciar nueva feature sería
Sin las extensiones de git-flow:
git checkout develop
git checkout -b feature_branch
Al usar la extensión de git-flow:
git flow feature start feature_branch
Y para finalizar Sin las extensiones de git-flow:
git checkout develop
git merge feature_branch
Al usar la extensión de git-flow:
git flow feature finish feature_branch
Rama de Release
Cuando la rama develop adquiere recursos suficientes para un release o la fecha de lanzamiento se está aproximando, bifurcas una ramificación de lanzamiento a partir de desarrollo. En este punto ningún nuevo recurso debe ser agregado, solo corrección de bugs y tests, generación de documentación y otras tareas. Cuando esté lista esta release, la rama de release es fusionada con la rama main y marcada con un número de versión. Además, debe ser fusionada de vuelta con la rama develop, la cual puede haber progresado desde que el lanzamiento fue iniciado.
Sin las extensiones de git-flow:
git checkout develop
git checkout -b release/0.1.0
Al utilizar extensiones de git-flow:
git flow release start 0.1.0
Después de lista, el release va a ser fusionado en la rama main y en develop y, entonces, la rama de release va a ser eliminada. El proceso de fusionar de vuelta con rama develop es importante porque actualizaciones importantes pueden haber sido agregadas a la ramificación de release y ellas deben ser accesibles a las nuevas features. Es el punto ideal para un pull.
Para finalizar la rama de release
Sin las extensiones de git-flow:
git checkout main
git merge release/0.1.0
O, con la extensión de git-flow:
git flow release finish '0.1.0'
Ramas de Hotfix
Las ramas de mantenimiento o de "hotfix" son usadas para corregir con rapidez lanzamientos de producción. Las ramificaciones de hotfix se parecen a ramificaciones de lanzamiento y de recurso, con la diferencia de que se basan a partir de la rama main en vez de develop. Esta es la única ramificación que debe ser bifurcada con objetividad a partir de la rama main. Así que la corrección se completa, debe ser fusionada tanto en la rama main como en develop (o en la ramificación de lanzamiento actual) y la rama main debe ser marcada con un número de versión actualizado.
Sin las extensiones de git-flow:
git checkout master
git checkout -b hotfix_branch
Al utilizar extensiones de git-flow:
git flow hotfix start hotfix_branch
Así como en la finalización de la ramificación de release, la ramificación de hotfix es fusionada tanto en la rama main como en develop.
Sin las extensiones de git-flow
git checkout master
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch
Con git-flow
git flow hotfix finish hotfix_branch
git flow es solo un flujo de trabajo, pero la extensión facilita la vida!