Um Guia para Git Branches
Sim, você provavelmente já ouviu falar de branches antes, por isso quis fazer um guia para você.
Se você está cansado de ficar sempre verificando na internet, este artigo é ideal para você.
Mas…
Se é a sua primeira vez, não tem problema, este artigo também é ideal para você.
O que é uma Branch no Git?
Uma branch no Git é uma linha independente de desenvolvimento dentro de um repositório.
Pense nisso como uma pasta de trabalho separada onde você pode fazer alterações sem afetar a pasta principal. As branches permitem que os desenvolvedores trabalhem em novos recursos, correções de bugs ou experimentos sem alterar a versão real do projeto.
É algo como final_version_89.xlsx
da maneira mais inteligente e controlada.
Por que Usar Branches?
As branches oferecem vários benefícios no fluxo de desenvolvimento:
- Isolamento: Mantêm tarefas diferentes (novos recursos, correções de bugs, experimentos) separadas.
- Colaboração: Vários desenvolvedores podem trabalhar em branches distintas sem interferir uns nos outros.
- Experimentação Segura: Permitem testar mudanças sem afetar o código em produção.
- Controle de Versão: Facilita a reversão ou troca entre diferentes versões do projeto.
No Git, a branch padrão geralmente se chama main
. No entanto, novas branches podem ser criadas para diferentes propósitos, como:
- Feature branches (
feature/new-ui
): Usadas para desenvolver novas funcionalidades. - Bugfix branches (
hotfix/login-fix
): Usadas para corrigir problemas em produção. - Release branches (
release/v1.2.0
): Usadas para preparar versões estáveis para implantação.
Agora, para ajudá-lo a gerenciar suas branches, abordarei quatro tópicos:
- Criando e Gerenciando Branches Locais
- Mesclando Branches
- Branches Remotas e Rastreamento de Branches
- Fluxo de Trabalho com Branches (Feature Branch, Hotfix e Release)
Criando e Gerenciando Branches Locais
Como mencionei anteriormente, as branches no Git permitem que você trabalhe em novos recursos, correções de bugs ou testes sem afetar a base de código principal.
Aqui está como criar, alternar, renomear e excluir branches de forma eficiente.
1. Criar uma Nova Branch
1
git branch feature/create-article
- Isso cria uma nova branch chamada
feature/create-article
, mas não alterna para ela. - Use quando você precisa preparar várias branches, mas não quer mudar imediatamente.
2. Alternar para uma Branch
1
git checkout feature/create-article
- Isso move você para a branch especificada.
Alternativa moderna: Desde o Git 2.23+, use git switch
:
1
git switch feature/create-article
- É uma alternativa mais limpa e segura ao
checkout
.
3. Criar e Alternar para uma Nova Branch
1
git checkout -b feature/create-article-2
- Cria uma nova branch e muda para ela imediatamente.
- Isso economiza tempo ao combinar dois comandos em um.
Alternativa moderna:
1
git switch -c feature/create-article-2
- Mais intuitivo e recomendado para versões mais recentes do Git.
4. Listar Todas as Branches
1
git branch
- Exibe todas as branches locais. A branch atual é marcada com
*
.
1
2
3
feature/create-article
* feature/create-article-2
main
Para listar também as branches remotas:
1
git branch -a
- P.S: Branches remotas serão o próximo assunto…
5. Renomear uma Branch
1
git branch -m feature/create-article-2 feature/create-article-1
- Renomeia a branch
feature/create-article-2
parafeature/create-article-1
.
Se você já estiver na branch que deseja renomear:
1
git branch -m feature/create-article-1
6. Excluir uma Branch Local (Com Segurança rs)
1
git branch -d feature/create-article-1
- Remove a branch somente se ela já estiver mesclada em outra branch.
- Se houver alterações não mescladas, o Git impedirá a exclusão para evitar perda de dados.
7. Forçar a Exclusão de uma Branch (Cuidado!)
1
git branch -D feature/create-article
- Isso exclui a branch mesmo que tenha alterações não mescladas.
- Use com cautela para evitar perda de trabalho importante.
Mesclando Branches
No Git, merge é o processo de integrar as alterações de uma branch em outra. Ele é comumente usado para combinar atualizações de diferentes branches de desenvolvimento em uma branch principal.
1. Mesclar uma Branch na Branch Atual
1
git merge feature/create-article
- Isso integra as mudanças de
feature/create-article
na branch em que você está atualmente. - Se não houver conflitos, o Git concluirá o merge automaticamente.
Certifique-se de estar na branch correta antes de mesclar:
1
2
git checkout main # ou git switch main
git merge feature/create-article
2. Resolvendo Conflitos de Merge
Durante uma mesclagem, se houver conflitos, o Git pausará o processo e informará os arquivos conflitantes.
Os conflitos são indicados no dessa maneira:
1
2
3
4
5
<<<<<<< HEAD
(alterações na branch atual)
=======
(alterações na branch mesclada)
>>>>>>> main
- A seção
HEAD
representa as alterações da sua branch atual. - A seção abaixo de
=======
vem da branch que está sendo mesclada.
Passos para Resolver Conflitos:
- Abra os arquivos conflitantes em um editor de texto ou VS Code.
- Edite manualmente e mantenha a versão correta do código.
- Marque os arquivos como resolvidos:
1
git add .
- Complete a mesclagem com um commit
1
git commit -m "Resolvendo conflitos de merge."
- Se quiser cancelar o merge e voltar ao estado anterior:
1
git merge --abort
Tipos de Merge no Git
O Git suporta diferentes estratégias de mesclagem, dependendo se as branches divergiram ou não.
1. Fast-Forward Merge (Sem Divergência)
O fast-forward merge ocorre quando a branch sendo mesclada está à frente da branch atual sem modificações.
O Git simplesmente move o ponteiro da branch em vez de criar um commit de merge.
Exemplo:
1
2
git checkout main
git merge feature/create-article
Se a main
não teve alterações desde que feature/create-article
foi criada, o resultado será:
1
2
3
4
5
Updating 5a26f39..db14708
Fast-forward
filename.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 filename.txt
2. Three-Way Merge (Branches Divergentes)
O three-way merge acontece quando as duas branches possuem históricos diferentes e não podem ser mescladas via fast-forward.
Nesse caso, o Git cria um novo commit de merge para combinar as mudanças.
Exemplo:
1
2
git checkout main
git merge feature/create-article
Isso gerará uma mensagem de commit automática:
1
Merge branch 'feature/create-article' into main
Agora, um novo commit de merge é criado para unir as duas branches.
Branches Remotas e Rastreamento de Branches
Branches remotas são versões das suas branches armazenadas em um repositório remoto (GitHub, GitLab, Bitbucket).
Elas permitem colaboração entre vários desenvolvedores, mantendo os repositórios locais sincronizados com o repositório remoto.
This is where the magic happens…
Por que usar branches remotas?
- Para colaborar com outros desenvolvedores, enviando (
push
) e recebendo (pull
) mudanças. - Para manter um backup do seu trabalho em um repositório central.
- Para gerenciar diferentes ambientes, como
main
,dev
estaging
.
1. Listar Branches Remotas
Para ver todas as branches armazenadas no repositório remoto:
1
git branch -r
- Isso lista apenas branches remotas, prefixadas por
origin/
.
Para listar todas as branches (locais e remotas):
1
git branch -a
- Isso ajuda a verificar quais branches existem localmente e remotamente.
2. Criar uma Branch que Rastreia uma Branch Remota
Se precisar trabalhar em uma branch remota localmente, use:
1
git checkout --track origin/dev
- Isso cria uma branch local chamada
dev
e a configura para rastrearorigin/dev
.
Resultado:
1
2
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'.
- Isso é útil quando o Git não configura automaticamente o rastreamento da branch.
3. Atualizar Branches Remotas
Para buscar atualizações do repositório remoto e garantir que você tem a última lista de branches:
1
git fetch
- Isso baixa as mudanças remotas mas não as aplica ao seu diretório de trabalho.
4. Mesclar Mudanças de uma Branch Remota na Branch Atual
Para puxar as últimas atualizações de uma branch remota para sua branch local:
1
git pull origin main
Isso equivale a rodar manualmente:
1
2
git fetch
git merge origin/main
Se a sua branch já está rastreando origin/<nome-da-branch>
, basta rodar:
1
git pull
5. Enviar uma Nova Branch Local para o Repositório Remoto
Após criar uma nova branch localmente, envie-a para o repositório remoto:
1
git push --set-upstream origin dev
- O
--set-upstream
define um rastreamento, permitindo que futurosgit pull
egit push
sejam executados sem precisar especificar o nome da branch.
6. Excluir uma Branch Remota
Se uma branch remota não for mais necessária, exclua-a com:
1
git push origin --delete dev
- Isso remove
dev
do repositório remoto.
Para excluir uma referência local à branch remota já deletada:
1
git remote prune origin
- Isso limpa as referências de branches remotas que não existem mais.
Workflow com Branches: Feature, Hotfix e Release
Este guia apresenta o fluxo de trabalho padrão usando branches do Git para desenvolvimento de funcionalidades (features
), correções de bugs (hotfix
) e lançamentos de versões (release
).
O objetivo é mostrar um processo simples para implantar uma versão, corrigir um bug e lançar uma funcionalidade.
1. Feature Branch
Branches de feature permitem desenvolver novas funcionalidades de forma independente, sem afetar o código principal.
Criar uma branch de feature:
1
git checkout -b feature/create-article
- Faça as alterações necessárias e realize commit no progresso.
Mesclar a branch de feature na branch dev
:
1
2
git checkout dev
git merge feature/create-article
- Isso garante que as novas funcionalidades sejam integradas ao fluxo de desenvolvimento sem afetar o código de produção.
2. Hotfix Branch
Branches de hotfix são usadas para correções urgentes em ambientes de produção.
Criar uma branch de hotfix baseada na branch dev
:
1
git checkout -b hotfix/main-article dev
- Faça as correções necessárias e comite as mudanças.
Mesclar a branch de hotfix na dev
:
1
2
git checkout dev
git merge hotfix/main-article
- Recomendação: Use sempre a branch
dev
, nunca diretamente amain
, especialmente semain
estiver em produção. Resolver um bug pode gerar outros!
3. Release Branch
Branches de release são criadas para preparar uma nova versão do software antes do deploy em produção. Isso permite testes e ajustes finais.
Criar uma branch de release baseada na dev
:
1
git checkout -b release/1.0.0 dev
- Realize testes e ajustes finais, comitando as mudanças conforme necessário.
Mesclar a release branch na main
e criar um tag da versão:
1
2
3
git checkout main
git merge release/1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"
Garantir que as mudanças da release também voltem para dev
:
1
2
git checkout dev
git merge release/1.0.0
- Isso garante que eventuais correções feitas durante a release não sejam perdidas no fluxo de desenvolvimento.
Criei um guia completo para te ajudar a entender Git & GitHub — confere lá!
Obrigado por ler até aqui!