Este tutorial tem por objetivo facilitar o entendimento e aplicabilidade da forma como GitFlow funciona, sem enrolação e direto ao ponto:
Gitflow é um projeto de fluxo de trabalho do Git que foi popularizado por Vincent Driessen. O fluxo define um modelo de ramificação estrito projetado em torno do lançamento e a publicaçāo do projeto. A imagem abaixo da uma idéia geral desse fluxo.
 
A tabela abaixo detalha os nomes e o que significa cada nome de branch:
| Situação | Branch | Descrição, Instruções | 
|---|---|---|
| Estável | master | Aceita merges a partir da Release e Hotfixes | 
| Trabalho | develop | Aceita merges a partir das Features e Hotfixes | 
| Features Internas | feature-id | Cria-se a partir da develop | 
| Bugfix | bugfix-id | Cria-se a partir da branch develop | 
| Hotfix | hotfix-id | Cria-se branch a partir da master | 
Feature Branches
Cada nova feature usa a develop como branch de origem. 
$ git checkout develop
$ git checkout -b feature-id
Após as modificações efetuadas realize o commit no seguinte padrão:  
 
$ git commit -m "[Feature-id] - Breve descrição da tarefa"
Exemplo para Hotfix - Correções que precisem entrar na produção imediatamente. 
$ git commit -m "[Hotfix-id] - Breve descrição da tarefa
Após o commit realizado deve-se obter as mudanças remotas  realizadas na branch develop
 realizadas na branch develop  :
 :
$ git checkout develop
$ git pull --rebase
Voltando para a branch da feature  . Aplicam-se as modificações já trazidas da develop
 . Aplicam-se as modificações já trazidas da develop 
$ git checkout feature-id
$ git rebase develop
PS:  NÃO utilize o seguinte comando
 NÃO utilize o seguinte comando git merge develop
Deve-se enviar  suas modificações para que se realize o Pull Request  :
 suas modificações para que se realize o Pull Request  : 
$ git push origin feature-id
A partir daí crie um Merge Request pela interface web do Gitlab.
Aguarde o código ser revisado por outro desenvolvedor, caso aprovado ele será mesclado com a develop
Release   
- As branchs de release funcionam como uma área de armazenamento temporário entre o desenvolvimento (develop) e produção (master).
Preparação :
- Atualização da develop: 
 $ git checkout develop $ git pull --rebase
- 
    Incremente o valor da versão no pom.xml caso necessário. 
- Criação da branch de release com base na develop: 
 $ git checkout -b release-x.x.x develop $ git push origin release-x.x.x
- Atualizar branch develop    ,  é importante atualizar, pois updates críticos podem ter sido adicionados na release branch, e eles precisam estar acessíveis na develop : ,  é importante atualizar, pois updates críticos podem ter sido adicionados na release branch, e eles precisam estar acessíveis na develop :
 $ git checkout develop $ git merge --no-ff release-x.x.x $ git push origin develop
Produção   
- Acesse a branch master: 
 $ git checkout master $ git pull --rebase
- Faça merge da master sem fast-forward com a release: 
 $ git merge --no-ff release-x.x.x
- Envie  para o repositório: para o repositório:
 $ git push origin master
- Crie a tag na branch master com o número da versão que está no pom.xml: 
 $ git tag -a vx.x.x master $ git push --tags
Hotfixes   
- Bug descoberto em produção  :
 :
- Cria-se um branch de hotfix com ponto de partida na master : 
 $ git checkout -b hotfix-id master
- Resolva o bug, e retorne para a master branch : 
 $ git checkout master $ git pull --rebase
- Faça um merge sem fast-forward, seguido de push da seguinte forma: 
 $ git checkout master $ git merge --no-ff hotfix-id $ git push origin master
- Incremente o valor tag na branch master 
 $ git checkout master $ git tag -a v1.x.1 master $ git push --tags
- Retorne para a develop, atualize-a   com o hotfix seguido de push com o hotfix seguido de push : :
 $ checkout develop $ git pull --rebase $ git merge --no-ff hotfix-id $ git push origin develop
- Bug   descoberto na release branch
 descoberto na release branch  :
 :
- Cria-se um branch de hotfix com ponto de partida na release-x.x.x: 
 $ checkout -b bugfix-id release-x.x.x
- Resolva bug, e retorne para a release branch : 
 $ checkout release-x.x.x
- Faça um merge sem fast-forward seguido de push, da seguinte forma: 
 $ merge --no-ff bugfix-id $ git push origin release-x.x.x
- Retorne para a develop, atualize-a   com o bugfix seguido de push com o bugfix seguido de push : :
 $ checkout develop $ git merge --no-ff bugfix-id $ git push origin develop
Qualquer dúvida postem nos comentários !!!! 