Fluxo de Trabalho do Git para Pequenas Equipes == 1. Primeiro, crie um _branch_ de desenvolvimento no seu repositório local: ``` $ git checkout --track origin/development ``` 2. Trabalhe em sua tarefa normalmente. Lembre-se de fazer _commits_ frequentes para manter o rastro do seu progresso. ``` $ git checkout -b nome_da_tarefa # Criando o _branch_ da sua tarefa ``` 3. Mantenha o _branch_ local de sua tarefa atualizado com o _branch_ remoto de desenvolvimento com quaisquer atualizações que a equipe fizer. ``` $ git checkout development # Mude para o branch de desenvolvimento $ git pull origin development # Atualize o branch de desenvolvimento $ git checkout nome_da_tarefa # Mude para o branch da sua tarefa $ git rebase development # Faça rebase ``` [Explicação sobre Git Rebase](https://git-scm.com/book/pt-br/v2/Branches-no-Git-Rebase) **ATENÇÃO: O ÚLTIMO COMANDO (REBASE) PODE GERAR CONFLITOS, VOCÊ PRECISARÁ CORRIGÍ-LOS ANTES DE CONTINUAR.** 4. Uma vez terminada a tarefa, junte todos os pequenos _commits_ em um único _commit_. ``` $ git rebase -i development ``` 4.1 Quando seu editor abrir, edite o texto exibido para que todos os textos dos _commits_ estejam unidos em um único _commit_. Veja o exemplo abaixo: #### Original ``` pick ae3a3dc Adding first part of new feature pick 3c82ad8 Adding second part ``` #### Como deve ficar ``` pick ae3a3dc Adding first part of new feature squash 3c82ad8 Adding second part ``` **ATENÇÃO: Substitua todos os 'pick' por 'squash' a partir da segunda linha.** 4. Faça um _merge_ do _branch_ da sua tarefa com o _branch_ de desenvolvimento local e, em seguida, faça um _push_ para o _branch_ de desenvolvimento remoto. ``` $ git checkout development # Mude para o _branch_ de desenvolvimento $ git pull origin master # Atualize o _branch_ de desenvolvimento $ git merge nome_da_tarefa # Junte as alterações do _branch_ de sua tarefa com o de desenvolvimento) $ git push origin development # Suba as alterações para o branch de desenvolvimento ``` 5. Exclua o _branch_ local de sua tarefa quando ele não for mais necessário. ``` $ git branch -d nome_da_tarefa ``` Liberação de Versão == ### Uma vez que todas as tarefas do _release_ estiverem prontas, faça o serguinte: 1. Faça um merge do _branch development_ com o _branch main_ $ git checkout main $ git merge development 2. Nomeie o release usando a seguinte notação major.minor.patch ``` $ git tag 1.0.0 ``` 3. Suba suas alterações ``` $ git push $ git push --tags ``` Encontrou um BUG? == ### O que acontece se um bug for encontrado no ambiente de produção? Faça o seguinte: 1. Faça as correções diretamente no _branch_ main. ``` $ git checkout master ``` (..) Faça as correções necessárias (..) ``` $ git commit -m "Bug Fix: descrição da correção" ``` 2. Nomeie-o como _patch_ de liberação (major.minor.patch) ``` $ git tag 1.0. # <- coloque aqui a versão do patch $ git push --tags ``` 3. Suba as alterações para o _branch main_ ``` $ git push origin main ``` 4. Faça um _merge_ do _branch main_ com o _branch development_ ``` $ git checkout development $ git merge main ``` **ATENÇÃO CASO OCORRAM CONFLITOS AO REALIZAR O _MERGE_, CORRIJA-OS.** 5. Suba as alterações para o _branch development_ ``` $ git checkout development $ git push origin development ```