Você provavelmente ainda não sabe GIT
git push, git status, git pull e etc... são o minímo que um dev deve saber!
Git existe para facilitar nossa vida, porém é difícil encontrar devs que ainda sabem usar todo o poder que o mesmo oferece.
Eu te conto isso por que muitas vezes eu me questiono sobre o que sei sobre git, isso por que pro básico qualquer curso da internet nos ajuda, até o próprio chat gpt, porém pra cenários complexos de conflitos, só sua sabedoria e experiência pode te ajudar, pois qualquer erro nas branchs do seu trabalho pode dar fim ao histórico de trabalho do colega ou até quebrar produção!
Por que GIT avançado é importante?
Eu vou te falar o básico que qualquer site te diz:
git init: Inicia um novo repositório Git no diretório.
git clone [url]: Clona um repositório remoto para o seu ambiente local.
git add [arquivo]: Adiciona alterações no arquivo ao staging area para prepará-las para o commit.
git commit -m "mensagem": Registra as alterações adicionadas no staging area com uma mensagem descritiva.
git status: Mostra o status das alterações no seu repositório, indicando arquivos modificados, adicionados ou pendentes.
git pull: Atualiza seu repositório local com as alterações mais recentes do repositório remoto.
git push: Envia as alterações locais para o repositório remoto.
git branch: Lista as branches existentes no repositório.
git checkout [branch]: Muda para a branch especificada.
git merge [branch]: Combina as alterações de uma branch com a branch atual.
Pronto agora você está pronto(a) para o mercado de trabalho 🤡
Agora vamos supor que estamos conversando uns 5 anos depois de você iniciar no mercado, e o seguinte cenário te atinge:
Você e seu time precisam realizar uma integração interna com outro serviço e o prazo é curto até então, porém a migração não pode ser feita de forma gradual pois irá impactar muitos usuários e vocês não tem ambiente de sandbox que simula o de produção.
Vocês realizam todo o desenvolvimento e vão levando o código final para uma branch de integração que mais pra frente será mergeada com a branch de prod.
Porém o time de negócios decide mudar o prazo de entrega dessa integração para outros mês.
Agora a branch de integração fica salva com as alterações, porém as outras prioridades são levadas pro fluxo de desenvolvimento normal e sendo mergeadas com a branch de prod.
MAS…
Deixando um pouco mais complexo seu cenário é:
main: A branch principal que reflete o estado atual do ambiente de produção.
integration: A branch de integração onde vocês realizaram o desenvolvimento inicial para a integração com outro serviço.
feature/new-priority: Uma branch para uma nova prioridade que foi mesclada com a master após a mudança de prazo.
hotfix/urgent-fix: Uma correção urgente que também foi mesclada com a master.
Como resolver, utilizando uma estratégia de git de forma avançada:
Atualizar a branch de integração:
git checkout integration git pull origin main
Criar uma nova branch para os testes:
git checkout -b testing/integration-tests
Realizar os testes necessários no ambiente local ou de dev:
Atualizar a branch de integração novamente:
git checkout integration git pull origin master
Criar uma nova branch para a grande quantidade de código antigo:
git checkout -b feature/legacy-code
Cherry-pick dos commits antigos na branch de integração:
git checkout integration git cherry-pick <commit-hash-antigo>
Repita esse comando para cada commit que achar relevante.
Resolver conflitos, se houver, durante o cherry-pick.
Rebase da branch de testes sobre a branch de integração:
git checkout testing/integration-tests git rebase integration
Resolver conflitos, se houver, durante o rebase.
Finalizar a rebase da branch de testes:
git rebase --continue
Finalizar a rebase da branch de integração:
git checkout integration git merge testing/integration-tests git push origin integration
Dessa forma, você utiliza o git cherry-pick
para reintegrar a grande quantidade de código antigo na branch de integração e o git rebase
para atualizar a branch de testes e integrá-la suavemente na branch de integração. Certifique-se de revisar e resolver conflitos durante o processo.
Usar o git merge não seria mais simples?
De fato seria, mais usar exclusivamente o comando merge
para resolver conflitos complexos pode acarretar em complicações para a equipe.
Isso se deve ao fato de que conflitos mais elaborados podem resultar em commits de merge extensos, dificultando a compreensão do histórico de commits.
Além disso, a identificação das causas raiz e possíveis problemas de integração pode se tornar mais desafiadora, especialmente quando há uma quantidade significativa de commits entre o ponto de divergência e o merge.
A clareza no histórico de commits também pode ser comprometida, tornando mais difícil compreender a evolução do código ao longo do tempo.
Técnicas alternativas, como rebase
ou cherry-pick
seguidos por rebase
, podem oferecer uma abordagem mais refinada, permitindo a resolução de conflitos em commits individuais e resultando em um histórico de commits mais claro e compreensível.
Saiba ir além do básico que te ensinam
Eu sei que os comandos básicos resolvem os problemas, mas perder código importante quando falamos de trabalho em equipe é muito mais importate.
Ter conhecimento sobre esses conceitos e saber aplicar é de extrema importante para você dev.
Comenta aqui, você gostaria de um conteúdo sobre GIT avançado?
Obrigada.
Dicas da semana 🔥
[CURSOS] -
[TESTES] - Como eu mostrei não basta apenas fazer exemplos, precisamos TESTAR DE FATO! Se você tem dificuldade ou quer se especializar um testes automatizados, tenho indiação de um curso fodástico para você → SE VOCÊ QUER MUDAR COMO TESTA SE CÓDIGO, CLICA AQUI!
☕️ [CAFÉ] - Se você gosta de tomar aquele cafézinho com código, eu te apresento a Veroo cafés, com meu cupom: ANANERI você garante um café por assinatura artesanal por mês
👩💻 [RECEBER DO EXTERIOR COM POUCAS TAXAS] - Galera, a Husky é a mais nova patrocinadora da news e com meu link você consegue criar uma conta gratuita pra receber seus pagamentos fora do Brasil!
Eu gostaria de ver mais sobre conteúdo sobre GIT avançado.