image

Bootcamps ilimitados + curso de inglés para sempre

80
%OFF
Article image
Thiago Castro
Thiago Castro09/04/2025 11:48
Compartir
Microsoft Certification Challenge #3 DP-100Recomendado para tiMicrosoft Certification Challenge #3 DP-100

Branches e Merges no GIT Sem Complicação

  • #Git
Você já se perguntou como conseguimos trabalhar em equipe no mesmo projeto de software sem bagunçar tudo?

No nosso dia a dia como desenvolvedores, a gestão de versões é fundamental para manter o controle e o sucesso de qualquer projeto. É aí que entra o GIT, um sistema de controle de versão distribuído que mudou completamente a forma como colaboramos e cuidamos do nosso código, especialmente quando se trata de trabalhar com branches e merges, recursos fundamentais que vamos descomplicar neste artigo.

Mas afinal o que são branches no GIT?

As branches, ou ramificações, no GIT são uma forma poderosa que usamos para trabalhar em várias versões de um projeto ao mesmo tempo. Com elas, conseguimos criar linhas do tempo paralelas, onde podemos testar novas funcionalidades, corrigir erros ou simplesmente experimentar ideias sem afetar o código principal. Só unimos essas mudanças quando tudo está pronto e funcionando como deve. Assim, mantemos o projeto organizado e seguro, mesmo com várias pessoas trabalhando juntas.

Na prática, um branch nada mais é do que um ponteiro que se move, apontando para um commit (ação que registra alterações em arquivos de um projeto, permitindo que elas sejam salvas e gerenciadas) específico no histórico do projeto. Quando criamos um novo branch, estamos abrindo um novo caminho dentro do repositório, que pode seguir uma direção diferente do branch principal a partir do momento em que foi criado. Isso nos dá liberdade para desenvolver de forma independente, sem alterar o que já está funcionando.

image

Benefícios de trabalhar com branches

  • Isolamento de mudanças: Usando branches, conseguimos separar nossas alterações do branch principal (geralmente chamado de main ou master). Isso nos permite desenvolver novas funcionalidades ou corrigir erros sem correr o risco de causar problemas no código que já está funcionando.
  • Colaboração simultânea: Com cada um em seu próprio branch, conseguimos trabalhar em equipe com muito mais agilidade. Podemos desenvolver partes diferentes do projeto ao mesmo tempo, sem conflitos e com muito mais organização.
  • Testes e experimentações: Branches também são ideais para testar ideias novas. Podemos experimentar à vontade, sabendo que, se algo der errado, o código principal continua intacto. Isso nos dá liberdade para inovar com segurança.

Tipos de branches no GIT

  • Branch principal: É onde mantemos a versão estável do projeto, pronta para ser usada ou publicada. Antigamente era chamada de master, mas hoje muitos repositórios utilizam o nome main.
  • Feature branches: Criamos esses branches quando vamos desenvolver novas funcionalidades ou melhorias. Eles são temporários e, depois que tudo está testado e funcionando, fazemos a mesclagem com o branch principal.
  • Hotfix branches: Usamos quando precisamos corrigir algum problema urgente em produção. A correção é feita rapidamente nesse branch e logo em seguida ele é integrado de volta ao principal.

Usar esses tipos de branches da forma certa nos ajuda a trabalhar com mais clareza, evitando confusões e facilitando o controle do projeto. Na próxima parte, vamos ver como colocar isso em prática, com comandos e estratégias simples para criar e gerenciar branches no GIT.

Na prática como criar e gerenciar branches?

Trabalhar com branches no GIT é simples, mas extremamente poderoso. Quando entendemos os comandos básicos e aplicamos algumas estratégias de branching, conseguimos organizar melhor o nosso fluxo de trabalho e colaborar com mais eficiência.

A seguir, vamos ver alguns dos comandos essenciais que usamos no dia a dia com branches:

Criar um novo branch

git branch nome-do-branch
# Esse comando cria um novo branch a partir do commit atual, mas não muda para ele automaticamente.

Mudar para um branch existente

git checkout nome-do-branch
# Usamos esse comando para alternar para o branch em que queremos trabalhar.

Criar e mudar para um novo branch ao mesmo tempo

git checkout -b nome-do-branch
# É um atalho prático que cria o novo branch e já nos coloca nele de uma vez.

Listar todos os branches

git branch
# Mostra todos os branches do repositório local. O branch em uso no momento aparece com um asterisco ao lado.

Com esses comandos, conseguimos controlar melhor o que estamos desenvolvendo, experimentar ideias novas e manter o projeto sempre bem organizado. A seguir, vamos explorar algumas estratégias de branching que podem deixar esse processo ainda mais eficiente.

Estratégias de Branching

Quando usamos branches de forma estratégica, conseguimos manter nosso fluxo de trabalho muito mais organizado e eficiente. Existem algumas abordagens bastante conhecidas que ajudam times a colaborar melhor e evitar confusões no código. Vamos conhecer as mais populares:

Git Flow

Uma estratégia mais estruturada, que define tipos específicos de branches: para funcionalidades (feature), para lançamentos (release) e para correções urgentes (hotfix). É ideal para projetos com ciclos de versão bem definidos, onde cada fase do desenvolvimento precisa estar separada e controlada.

GitHub Flow

Mais simples e direto, esse modelo usa apenas o branch principal e branches de funcionalidades. As mudanças são feitas nesses branches secundários e, depois de revisadas, são mescladas ao principal. Funciona muito bem com integração contínua e para equipes que fazem entregas frequentes.

Trunk-Based Development

Aqui, trabalhamos basicamente em um único branch principal (o trunk), com commits pequenos e frequentes. É uma estratégia muito usada em equipes ágeis, pois favorece a entrega contínua e reduz o acúmulo de mudanças grandes.

Você deve escolher a estratégia que melhor combina com sua forma de trabalhar e com as exigências do projeto. Na próxima parte, vamos ver como funciona o processo de merge, que é essencial para integrar as mudanças feitas em diferentes branches de forma segura e sem dor de cabeça.

Merge, como juntar sem bagunçar?

Entre as funcionalidades mais importantes do GIT, o merge se destaca por permitir que a gente una mudanças feitas em diferentes branches. É graças a ele que conseguimos consolidar o trabalho de várias pessoas ou integrar novas funcionalidades ao branch principal sem bagunça.

Fazer um merge significa juntar duas ou mais linhas de desenvolvimento em um único fluxo de histórico. Na prática, isso quer dizer que podemos pegar as alterações feitas em um branch (como uma nova funcionalidade) e integrar ao branch principal, ou até mesmo o contrário.

Com isso, conseguimos manter o histórico de commits organizado e garantir que as contribuições feitas em paralelo se encontrem em um único ponto, sem perder nenhuma parte do desenvolvimento.

image

Tipos de merge

No GIT, podemos encontrar dois tipos principais de merge, e entender como cada um funciona nos ajuda a escolher a melhor forma de integrar mudanças no projeto.

Fast Forward Merge

Esse tipo de merge acontece quando o branch de destino está diretamente “à frente” do branch que queremos unir. Nesse caso, o GIT apenas move o ponteiro do branch para o commit mais recente, sem precisar criar um novo commit de merge. É o caminho mais rápido e limpo, e geralmente usamos quando não houve divergência entre os branches.

Three-Way Merge

Aqui a situação é diferente: os branches seguiram caminhos distintos e agora precisamos juntar tudo. O GIT identifica um commit ancestral comum e cria um novo commit que une as mudanças feitas nos dois lados. Essa abordagem é essencial quando os históricos divergem e é também onde podem surgir conflitos que precisamos resolver manualmente.

Saber qual tipo de merge está acontecendo nos ajuda a manter o controle do projeto e evitar surpresas durante a integração das mudanças.

Na prática como fazer um merge

Para integrar mudanças entre branches no GIT, usamos alguns comandos simples, mas muito importantes. Vamos ver como fazer isso passo a passo:

Iniciar um merge

git merge nome-do-branch
# Esse comando faz o GIT tentar mesclar o branch indicado com o branch em que estamos no momento. Se tudo estiver alinhado, a fusão acontece automaticamente.

Resolver conflitos de merge

Às vezes, o GIT encontra diferenças que ele não consegue resolver sozinho — é aí que entram os conflitos. Quando isso acontece, os arquivos com conflito ficam marcados e precisamos resolver manualmente.

Como Resolver Conflitos de Merge no Git

Trabalhar em equipe no desenvolvimento de software é incrível... até que alguém faz um merge e o Git solta um "CONFLICT" bem no meio do seu dia. Se você já viu aquelas linhas estranhas como <<<<<<< HEAD e >>>>>>> branch, parabéns: você sobreviveu ao seu primeiro conflito de merge!

Mas calma, conflitos são mais comuns (e menos assustadores) do que parecem. Vamos entender por que eles acontecem, como identificá-los e, o mais importante, como resolvê-los de forma eficiente.

O que é um Conflito de Merge?

Conflitos de merge surgem quando o Git não consegue decidir sozinho qual versão do código deve prevalecer. Isso acontece principalmente quando duas pessoas alteram as mesmas linhas de um arquivo, ou quando alguém apaga um arquivo que o outro ainda está editando. Esses conflitos afetam apenas quem está fazendo o merge, o resto da equipe nem vê.

Como o Git Avisa que Existe um Conflito?

Quando um conflito acontece, o Git interrompe o merge automaticamente e marca os arquivos afetados. A mensagem típica no terminal é assim:

CONFLICT (content): Merge conflict in arquivo.txt 
Automatic merge failed; fix conflicts and then commit the result.

Para ver a lista completa de arquivos em conflito, é só rodar:

git status  

Simulando um Conflito na Prática (e Resolvendo!)

Quer entender na prática? Bora simular um conflito:

# Criar um novo repositório
mkdir git-merge-test && cd git-merge-test
git init .
# Criar e comitar um arquivo
echo "linha original" > arquivo.txt
git add arquivo.txt
git commit -m "commit inicial"

Agora, crie e edite uma nova branch:

git checkout -b nova-branch
echo "conteúdo da nova branch" > arquivo.txt
git commit -am "alteração conflitante"

Volte para a main e edite o mesmo arquivo:

git checkout main
echo "conteúdo da main" >> arquivo.txt
git commit -am "outra alteração conflitante"

E agora... tente fazer o merge:

git merge nova-branch

PRONTO! Conflito detectado.

O arquivo arquivo.txt vai aparecer com algo assim:

<<<<<<< HEAD
linha original
conteúdo da main
=======
conteúdo da nova branch
>>>>>>> nova-branch  

Como Resolver um Conflito de Merge?

  1. Abra o arquivo em conflito no seu editor de texto favorito.
  2. Remova os marcadores de conflito (<<<<<<<, =======, >>>>>>>) e combine o conteúdo de forma coerente.
  3. Salve o arquivo resolvido.
  4. Marque como resolvido:
git add arquivo.txt
git commit -m "resolvido conflito no arquivo.txt"

E pronto! O merge será finalizado.

Ferramentas Úteis Para Resolver Conflitos

  • git status: mostra os arquivos afetados.
  • git diff: mostra o que está diferente.
  • git merge --abort: cancela o merge atual.
  • git log --merge: mostra commits conflitantes.
  • git reset: desfaz mudanças locais.

Conflitos são normais e fazem parte do processo. Quanto mais colaborativo o projeto, mais provável que eles apareçam. A boa notícia é que, com prática, resolver conflitos vira rotina — e o Git dá ferramentas poderosas pra isso.

Casos de Uso: Aplicações Práticas com Branches e Merges no Git

Entender a teoria é importante — mas nada como ver como tudo isso funciona na prática. A seguir, vamos explorar situações reais em que o uso estratégico de branches e merges no Git facilita a colaboração, aumenta a produtividade e mantém o código mais organizado.

1. Projeto Colaborativo

Imagine uma equipe desenvolvendo um aplicativo web. Cada membro cuida de uma parte específica: frontend, backend, integração com API... Como garantir que todos possam trabalhar ao mesmo tempo sem bagunçar o código alheio?

Solução: usar branches separados para cada funcionalidade.

Exemplo prático:

  • O desenvolvedor frontend cria o branch feature/navbar para implementar a nova barra de navegação.
  • O backend cria feature/authentication para desenvolver a autenticação de usuários.
  • Quando as funcionalidades estiverem testadas e aprovadas, cada branch é mesclado ao branch principal (geralmente o main ou develop) após uma revisão de código.

Benefício: o trabalho em paralelo flui sem conflitos e com mais segurança.

2. Desenvolvimento de Funcionalidades

A cada nova funcionalidade, surge o risco de instabilidade no sistema. Mas com Git, é possível isolar esse desenvolvimento até que tudo esteja pronto.

Exemplo prático:

  • Um branch feature/search-bar é criado para adicionar uma barra de pesquisa.
  • Durante o desenvolvimento, esse branch é mantido atualizado com as últimas mudanças do main usando git merge main ou git rebase main.
  • Depois de testado, o branch é mesclado e a nova funcionalidade vai ao ar sem surpresas.

Benefício: funcionalidades são integradas ao projeto apenas quando estão maduras, testadas e estáveis.

3. Manutenção e Hotfixes em Produção

Problemas em produção precisam ser resolvidos rapidamente — mas sem interromper o que está em andamento nos outros branches.

Exemplo prático:

  • Um bug crítico aparece. É criado um branch hotfix/critical-bug a partir do main.
  • A correção é feita, testada e mesclada de volta ao main, indo direto para produção.
  • O mesmo hotfix também é mesclado nos branches de desenvolvimento (develop, feature/...) para que todos fiquem atualizados.

Benefício: bugs urgentes são resolvidos com agilidade, sem impactar outras tarefas em progresso.

Esses casos mostram como o Git, quando bem utilizado, é mais que um sistema de versionamento — é um verdadeiro aliado na organização, manutenção e evolução de projetos.

Na próxima seção, vamos fechar com uma reflexão sobre os principais benefícios do Git e sugestões para quem quer se aprofundar ainda mais nessa ferramenta essencial para qualquer desenvolvedor.

Conclusão

Ao longo deste artigo, vimos como o uso de branches e merges no Git é uma das práticas mais poderosas e indispensáveis no desenvolvimento de software moderno. Mais do que apenas ferramentas técnicas, eles representam uma forma estratégica de trabalhar com mais segurança, colaboração e eficiência.

Resumo dos Benefícios
  • Colaboração eficiente: Branches permitem que múltiplos desenvolvedores trabalhem em paralelo, cada um focado em uma tarefa específica, sem riscos de sobrepor ou bagunçar o código dos colegas.
  • Controle de versão avançado: Toda mudança pode ser rastreada, documentada e, se necessário, revertida. Isso traz segurança para o processo de desenvolvimento.
  • Flexibilidade e inovação: Com branches isolados, é possível testar novas ideias sem afetar o código principal — um estímulo à criatividade e à experimentação.
Impacto no Desenvolvimento

Adotar o uso estratégico de branches e merges muda completamente a dinâmica de uma equipe. Além de aumentar a produtividade, essa prática reduz falhas, facilita o controle de qualidade e acelera entregas. É uma abordagem que permite escalar projetos com confiança, mesmo com times grandes e funcionalidades complexas.

Próximos Passos

Quer dominar ainda mais o Git e aproveitar todo o seu potencial? Aqui vão algumas sugestões para continuar aprendendo:

  • Documentação Oficial do Git: Referência completa para todos os comandos, ideal para consultas rápidas e aprofundamentos.
  • Tutoriais e Cursos: Plataformas como Dio e YouTube oferecem cursos desde o nível básico até o avançado.
  • Comunidades e Fóruns: Participe de grupos no Stack Overflow, GitHub Discussions ou no Reddit, compartilhar experiências é uma excelente forma de aprender.

Dominar o Git é mais do que uma habilidade técnica, é um diferencial profissional que torna você um desenvolvedor mais preparado, produtivo e alinhado com as boas práticas do mercado. Que tal agora aplicar esses conhecimentos em seus projetos para ter um desenvolvimento mais ágil, seguro e colaborativo?

Compartir
Recomendado para ti
Microsoft 50 Anos - Prompts Inteligentes
Microsoft 50 Anos - GitHub Copilot
Microsoft 50 Anos - Computação em Nuvem com Azure
Comentarios (2)
Thiago Castro
Thiago Castro - 09/04/2025 18:00

@communityengagementdio, muito obrigado pelo feedback!

Sobre sua pergunta a resposta é SIM!

No momento em que estamos, com tudo acotecendo de maneira exponencial, ferramentas que automatizam nossos fluxos de trabalhos são indispensaveis, especialmente quando estamos falando de equipes maiores, onde os erros acontecem com mais frequencia. Dentre tantos benefícios, ao utilizar ferramentas como GitHub Actions e GitLab CI nós temos menos bugs, menos conflitos entre desenvolvedores, código sempre testado e funcional, publicações rápidas e frequentes, feedback quase em tempo real e redução de erros humanos.

DIO Community
DIO Community - 09/04/2025 14:55

Thiago, seu artigo sobre o uso de branches e merge no Git foi realmente esclarecedor! Você conseguiu simplificar conceitos essenciais de versionamento de código, destacando como esses recursos são fundamentais para manter a organização e facilitar a colaboração no desenvolvimento de software. A explicação sobre a criação de branches e o processo de merge foi muito prática, o que torna mais fácil para os desenvolvedores aplicarem essas técnicas no seu dia a dia.

Na DIO, temos dado ênfase ao uso dessas boas práticas, especialmente nas turmas de DevOps e Engenharia de Software, onde o controle de versão é um dos pilares do aprendizado. O uso adequado de branches e merges tem sido uma das principais habilidades que buscamos cultivar em nossos alunos, garantindo que eles saibam trabalhar de maneira eficiente e colaborativa em projetos reais.

Gostaria de saber sua opinião: você acredita que a popularização de ferramentas como GitHub Actions e GitLab CI pode simplificar ainda mais o processo de merge e integração contínua em equipes maiores?

Recomendado para tiMicrosoft Certification Challenge #3 DP-100