Feature Branch — é uma técnica de ramificação no Git em que cada nova funcionalidade é desenvolvida em um ramo separado, isolado do código principal. Isso permite que vários desenvolvedores trabalhem simultaneamente em diferentes tarefas sem o risco de danificar a versão estável do projeto. De acordo com a Atlassian, 2024, o Feature Branch é um elemento-chave do Git Flow e é usado na maioria dos projetos comerciais.
Pontos Principais
feature/nome-função no Git Flow padrão.Feature Branch (ramo de funcionalidade) é um ramo temporário no Git criado a partir de develop para desenvolver uma funcionalidade específica. Ao contrário dos ramos de longa duração main e develop, os ramos feature existem por um tempo limitado — de algumas horas a algumas semanas.
O principal objetivo do feature branch é isolar as alterações relacionadas a uma tarefa do resto do código. O desenvolvedor pode experimentar, fazer vários commits e até quebrar o código em seu próprio ramo sem afetar o trabalho de outros membros da equipe.
Após a conclusão do desenvolvimento, o ramo feature é mesclado de volta ao develop por meio de um Pull Request com revisão de código obrigatória. Após a mesclagem, o ramo geralmente é excluído para manter o repositório limpo.
De acordo com Vincent Driessen, 2010, o modelo Git Flow com ramos feature tornou-se um padrão da indústria graças à clara separação de responsabilidades entre diferentes tipos de ramos.
O fluxo de trabalho com feature branch consiste em uma sequência de etapas que o desenvolvedor realiza para cada nova funcionalidade. Esse processo minimiza os conflitos de mesclagem e garante o controle de qualidade do código.
A sincronização periódica com develop é criticamente importante. Quanto mais tempo um ramo feature viver sem mesclar alterações do develop, maior a probabilidade de conflitos na mesclagem final.
| Frequência de sincronização | Risco de conflitos | Conveniência de desenvolvimento |
|---|---|---|
| Diariamente | Baixo | Requer rebase ou merge frequente |
| Semanalmente | Médio | Ritmo confortável, conflitos moderados |
| Mensalmente | Alto | Risco de resolução complexa de conflitos |
| Nunca | Crítico | A mesclagem pode ser impossível sem perda de dados |
A nomenclatura de ramos é uma parte importante da disciplina da equipe. Um padrão de nomenclatura uniforme permite identificar rapidamente em qual tarefa se está trabalhando e quem a está realizando.
feature/added-auth-module.feature/PROJ-42-add-login.feature/feat/analytics-dashboard.O uso do ID da tarefa do JIRA, Trello ou outro sistema é uma prática recomendada. Ele vincula automaticamente o código à tarefa e simplifica a busca de ramos através do git log.
Pull Request (ou Merge Request no GitLab) é uma solicitação para mesclar o ramo feature em develop. Um PR não é apenas uma operação técnica, mas um processo de revisão de código em equipe que melhora a qualidade do código e dissemina o conhecimento dentro da equipe.
Um bom PR contém um título com uma breve descrição da tarefa, um link para o ticket e uma descrição das alterações. O desenvolvedor deve indicar o que exatamente foi feito, quais arquivos foram alterados e se existem riscos potenciais para outras partes do projeto.
A equipe revisa o código no PR, deixa comentários, solicita alterações (change requests) e aprova a mesclagem (approve). Após a aprovação, é realizado um merge ou squash merge.
O tempo médio de revisão de PR no desenvolvimento móvel é de 4 a 24 horas. A biblioteca Danger automatiza parte das verificações, executando linters e testes diretamente no PR.
Após a aprovação do PR, o ramo feature pode ser mesclado ao develop de diferentes maneiras. A escolha da estratégia de mesclagem afeta o histórico de commits e a possibilidade de reverter alterações.
Para projetos móveis com lançamentos frequentes, o squash merge é o mais utilizado: fornece um histórico limpo em develop, enquanto os detalhes do desenvolvimento permanecem na descrição do PR e na tarefa do tracker.
Mesmo desenvolvedores experientes cometem erros ao trabalhar com ramos feature. Conhecer os problemas típicos ajuda a evitar perda de tempo e dados.
A melhor maneira de evitar esses problemas é concordar com as regras de trabalho no início do projeto e usar verificações automatizadas no pipeline de CI/CD.
Vamos considerar um cenário prático: um desenvolvedor inicia uma nova funcionalidade de autenticação em um aplicativo móvel. Ele cria um ramo feature, trabalha no código e conclui a tarefa com um Pull Request.
# Atualizar develop e criar ramo feature
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# Trabalho na funcionalidade: commits
git add src/ui/login/
git commit -m "Add login screen layout"
# Enviar ramo feature para o servidor remoto
git push origin feature/add-login-screen
# Sincronização com develop (rebase)
git fetch origin develop
git rebase origin/develop
# Após aprovação do PR: atualizar develop local e excluir o ramo
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
O comando git branch -d exclui o ramo apenas depois que suas alterações foram totalmente mescladas. Se o ramo não estiver mesclado, o Git sugerirá usar git branch -D para exclusão forçada — use esta flag com cautela.
O pipeline de CI/CD deve ser executado para cada ramo feature antes de criar um PR. Isso permite detectar problemas em um estágio inicial, antes que o código chegue à revisão de outros desenvolvedores.
# GitHub Actions para verificar o ramo feature
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
O pipeline verifica se o código compila, os testes passam e o estilo do código atende aos padrões da equipe. Somente após passar em todas as verificações é que um Pull Request pode ser criado.
Perguntas Frequentes
Sim, é uma prática padrão. Cada desenvolvedor pode trabalhar em seu próprio ramo feature, e todos eles sincronizam com develop independentemente. A regra principal é um ramo por tarefa para evitar dependências cruzadas no código.
Execute git rebase origin/develop no seu ramo feature. Se surgirem conflitos, resolva-os um por um — os commits serão reescritos sobre o estado mais recente do develop. Após o rebase, será necessário git push --force para atualizar o ramo remoto.
Se a tarefa foi cancelada, basta excluir o ramo feature. Use git branch -d feature/nome para o ramo local e git push origin --delete feature/nome para o remoto. Todas as alterações não confirmadas serão perdidas.
Em essência, é a mesma coisa. Diferentes equipes usam prefixos diferentes: feature/, task/, feat/. Não há diferença na mecânica do Git — todos são ramos temporários criados a partir de develop para desenvolvimento isolado.
Sim, é uma prática obrigatória. Ramos após a mesclagem poluem a lista de referências e podem causar confusão. A maioria das plataformas (GitHub, GitLab) oferece excluir o ramo imediatamente após o merge do PR, e os ramos locais são excluídos com o comando git branch -d.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também