diff --git a/README.md b/README.md index e36e5bc20adc954897c7e96f650f7f0998a6dd16..248b59ff9c5fc1d0f57604a2f2ed41d0cb299b89 100644 --- a/README.md +++ b/README.md @@ -65,3 +65,226 @@ docker-compose up -d ``` Isso criará um ambiente pronto para desenvolvimento, permitindo iniciar a implementação do backend imediatamente. + + +## Fluxo do git + + +Este documento descreve o fluxo de trabalho recomendando para gerenciar branches e commits em um projeto usando Git. + + + +### Passos + + + +#### 1. Pegar a Issue + +Decida qual issue você irá trabalhar. Verifique as tarefas e determine qual delas você será responsável. + + + +#### 2. Criar uma Branch a partir da `develop` + +Certifique-se de que a branch `develop` está atualizada antes de criar sua nova branch. + + + +1. Vá para a branch `develop`: + +```bash + +git checkout develop + +``` + + + +2. Atualize a branch `develop` com as últimas alterações do repositório remoto: + +```bash + +git pull origin develop + +``` + + + + +3. Criar e mudar para uma nova branch seguindo o padrão da issue + +Ao iniciar o desenvolvimento, crie uma nova branch nomeada conforme o padrão abaixo: + +issue-<número_da_issue>/\<palavras-chave\> + + 📌 Por que usar esse padrão? +Cada issue no GitLab recebe automaticamente um número único. Esse número deve estar presente no nome da branch para facilitar a rastreabilidade. + +As palavras-chave, separadas exclusivamente por hífens, são de escolha pessoal, mas devem descrever de forma objetiva o que está sendo feito. Isso permite que, à primeira vista, qualquer pessoa entenda o propósito da branch. + +**Exemplo:** + +issue-256/fix-login-form +```bash + +git checkout -B issue-<número_da_issue>/<palavras-chaves> + +``` + + + +#### 3. Desenvolver a Feature na Branch + +Faça as alterações necessárias para resolver a issue. Lembre-se de fazer commits pequenos e descritivos. + + + +1. Adicione as alterações ao índice: + +```bash + +git add . + +``` +> **💡 Dica:** +> O comando ```git add -A``` é mais confiável que o ```git add .```, pois o segundo refere-se somente a pasta atual e suas subpastas. + + +2. Faça o commit das alterações: + +```bash + +git commit -m "breve descrição" + +``` + + + +#### 4. Rebase da `develop` para Sua Branch + +Antes de finalizar o trabalho, faça um rebase para garantir que sua branch esteja atualizada com as últimas mudanças da `develop` e para transformar todos seus commits em um só, facilitando o entendimento do histórico de commits. + + + +1. Vá para a branch `develop`: + +```bash + +git checkout develop + +``` + + + +2. Atualize a branch `develop`: + +```bash + +git pull origin develop + +``` + + + +3. Volte para sua branch de desenvolvimento: + +```bash + +git checkout nome-da-branch + +``` +> **💡 Dica:** +> O comando ```git checkout -``` volta para a última branch acessada. Isso pode facilitar a navegação. + + + + +4. Rebase da branch em relação à `develop` + +Antes de incorporar alterações da `develop`, primeiro consolidamos nossos commits em um único, sem puxar mudanças (ou possíveis conflitos). Para isso, execute: + +```bash +git rebase -i develop --keep-base +``` +Isso abrirá uma tela no seu editor com a lista de commits da sua branch, todos precedidos por `"pick"`. + + ✏️ Como editar os commits? + +1. **Mantenha "pick" apenas no primeiro commit.** + +2. **Altere todos os demais para "f"** (de `fixup`), consolidando-os no primeiro. + +3. **Verifique se a mensagem do primeiro commit está correta**, seguindo o formato: + `Issue #<número_da_issue>: <Palavra de Poder> <descrição do que foi feito, em inglês>` + + - 3.1. **Se estiver correto**: Basta salvar e fechar seu editor. + - 3.2. **Se estiver errado**: troque "pick" para "r" (de rename), salve e feche o editor. Um novo editor irá abrir somente com o nome do commit a ser alterado. Efetivamente transformando todos os commits em um só. + + +##### 🔹 Palavras de Poder + +Use uma das palavras-chave abaixo para indicar a natureza da mudança: + +- `Add` +- `Change` +- `Deprecate` +- `Remove` +- `Fix` +- `Security` + +Essas palavras seguem o padrão [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). + +##### 📌 Exemplo de commit correto: + +`Issue #256: FIX form login was not working when Enter was pressed` + + +5. Caso ocorram conflitos, resolva-os. Após resolver, use: + +```bash + +git add -A + +git rebase --continue + +``` +> **💡 Dica:** +> O VSCode possui uma interface que ajuda muito nessa hora! + + 6. Execute o comando que efetivamente puxará as atualizações da `develop`: + +```bash +git rebase -i develop +``` + +Se o passo 5 foi executado corretamente, aqui basta salvar a tela que abrirá do seu editor. Se houverem conflitos, resolva-os, senão, a mensagem de `Successfully rebased and updated` aparecerá. + +Como uma possível referência do processo, [este link](https://adamj.eu/tech/2022/03/25/how-to-squash-and-rebase-a-git-branch/) pode ser útil. + +#### 7. Push e Pull Request (PR) + +Depois de finalizar o trabalho, envie sua branch para o repositório remoto e abra um Merge Request (MR, também chamado de Pull Request pelo github) para revisão de código. + + + +1. Envie a branch para o repositório remoto: + +```bash + +git push origin nome-da-branch -f + +``` +> **💡 Dica:** +>A flag '-f' vem de "force" e deve ser usada para informar o git que você sabe o que está fazendo, pois com o rebase os commits estarão fora de sincronia. + +Verifique se sua branch está com 0 commits atrás da develop e 1 commit na frente da develop, isso é indicado na aba "branchs" do gitlab pela notação `0|1` ao lado do nome da sua branch. + +2. Abra um Merge Request (MR) no repositório remoto para revisão de código. + + + +--- + + + +Esse fluxo de trabalho ajuda a manter o histórico do Git limpo, organiza as alterações de forma eficiente e facilita a colaboração em equipe. Esse fluxo é **obrigatório** dentro do C3SL e não deve ser alterado sem existir motivo maior de organização de código e fluxo de trabalho. \ No newline at end of file