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: :fire:

$ 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 :arrows_clockwise: realizadas na branch develop :satellite: :

$ git checkout develop
$ git pull --rebase

Voltando para a branch da feature :hammer: . Aplicam-se as modificações já trazidas da develop

$ git checkout feature-id
$ git rebase develop

PS: :no_entry_sign: NÃO utilize o seguinte comando git merge develop

Deve-se enviar :rocket: 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 :helicopter:

  • As branchs de release funcionam como uma área de armazenamento temporário entre o desenvolvimento (develop) e produção (master).

Preparação :

  1. Atualização da develop:
    $ git checkout develop
    $ git pull --rebase
    
  2. Incremente o valor da versão no pom.xml caso necessário.

  3. 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
    
  4. Atualizar branch develop :gun: , é 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 :bullettrain_side:

  1. Acesse a branch master:
    $ git checkout master
    $ git pull --rebase
    
  2. Faça merge da master sem fast-forward com a release:
    $ git merge --no-ff release-x.x.x
    
  3. Envie :rocket: para o repositório:
    $ git push origin master
    
  4. 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 :ambulance:

- Bug descoberto em produção :loudspeaker: :

  • 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 :arrow_down: com o hotfix seguido de push :triangular_flag_on_post: :
    $ checkout develop
    $ git pull --rebase
    $ git merge --no-ff hotfix-id
    $ git push origin develop
    

- Bug :bug: descoberto na release branch :mega: :

  • 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 :arrow_down: com o bugfix seguido de push :triangular_flag_on_post: :
    $ checkout develop
    $ git merge --no-ff bugfix-id
    $ git push origin develop
    

Qualquer dúvida postem nos comentários !!!! :loudspeaker: