Release Branch é uma branch no Git Flow criada a partir de develop para preparar uma release específica para implantação. Nela, a versão do aplicativo é fixada, os últimos bugs são corrigidos e os metadados são atualizados — sem adicionar novas funcionalidades. De acordo com Vincent Driessen, 2010, a branch release separa a preparação do lançamento do desenvolvimento atual, permitindo que ambas as atividades ocorram em paralelo.
Pontos principais
release/X.Y.Z de acordo com a versão do aplicativo.Release Branch (branch de lançamento) é uma branch temporária no Git Flow, criada a partir de develop quando a equipe decide que o conjunto atual de funcionalidades está pronto para lançamento. Ela existe exatamente pelo tempo que a preparação final da release leva — de algumas horas a alguns dias.
O objetivo principal de uma branch release é congelar um conjunto específico de funcionalidades para o lançamento sem interromper o desenvolvimento das próximas versões. Enquanto a branch release está sendo preparada para implantação, outros desenvolvedores podem continuar mesclando branches feature em develop para a próxima release.
Nenhuma nova funcionalidade é criada na branch release — apenas correções de bugs, atualização de versão do aplicativo, localização e documentação. Após todo o trabalho ser concluído, a branch release é mesclada em main (marcada como release) e de volta em develop (para que as correções cheguem às versões futuras).
De acordo com Atlassian, 2024, as branches release são criticamente importantes para projetos com ciclos de lançamento regulares — elas garantem previsibilidade e estabilidade no processo de publicação.
O ciclo de vida da branch release, desde a criação até a exclusão, inclui várias etapas. Compreender cada etapa ajuda a equipe a sincronizar ações e evitar erros.
release/2.5.0 é criada. develop continua aceitando branches feature para a próxima versão.v2.5.0.O passo 6 — a mesclagem reversa em develop — é frequentemente esquecido, mas é criticamente importante. Sem ele, as correções feitas na branch release não chegarão a develop, e os mesmos erros podem reaparecer na próxima release.
O tempo de vida da branch release depende da complexidade da release e da qualidade do código em develop. Em média, a preparação leva de 2 a 5 dias úteis para um aplicativo móvel de médio porte.
Na branch release, um conjunto estritamente limitado de tarefas é executado. Qualquer desvio desta lista viola o modelo Git Flow e cria riscos para a estabilidade da release.
| Tipo de alteração | Permitido | Exemplo |
|---|---|---|
| Versionamento | Sim | Atualização de versionName em build.gradle |
| Correção de bugs | Sim | Correção de crash na inicialização |
| Localização | Sim | Adição de traduções para novas telas |
| Documentação | Sim | Atualização de CHANGELOG e README |
| Novas funcionalidades | Não | Adição de uma nova tela de perfil |
| Refatoração | Não | Reescrita da camada de rede |
| Atualização de bibliotecas | Com cuidado | Apenas versões patch para correções |
A regra de proibição de novas funcionalidades é a mais importante na branch release. Se uma funcionalidade não ficou pronta para a release, ela aguarda o próximo ciclo. Tentar introduzir uma funcionalidade incompleta na branch release é a principal causa de atrasos e bugs em produção.
Na branch release, o número da versão do aplicativo é obrigatoriamente atualizado. Para Android, são os campos versionCode e versionName em build.gradle; para iOS — CFBundleShortVersionString em Info.plist.
// build.gradle (nível do app) — atualização de versão na branch release
android {
defaultConfig {
versionCode 42
versionName "2.5.0"
}
}
// Para iOS — atualização de Info.plist
// CFBundleShortVersionString = 2.5.0
// CFBundleVersion = 42
Desenvolvedores iniciantes frequentemente confundem as branches release e hotfix, embora seus propósitos sejam fundamentalmente diferentes. Escolher o tipo errado de branch pode atrasar uma correção crítica ou interromper o processo de release.
Se um bug for encontrado durante a preparação da release (na branch release) — é uma correção normal. Se um bug for encontrado em produção (em main) — é um hotfix, e é criado a partir de main, mesmo que a branch release já exista.
Um padrão unificado de nomenclatura das branches release simplifica a navegação no repositório e permite que sistemas CI/CD detectem automaticamente que uma branch pertence ao processo de release.
release/2.5.0.release/merlin.release/2024-12-01.O formato release/X.Y.Z é o preferido, pois vincula explicitamente a branch ao número de versão que será atribuído à release. Isso simplifica a busca e o processamento automático por scripts CI/CD.
A mesclagem reversa (merge back) da branch release em develop é uma das operações mais importantes e, ao mesmo tempo, uma das mais frequentemente ignoradas. Sem ela, todas as correções feitas na branch release permanecem apenas na versão de lançamento e não chegam ao próximo ciclo de release.
O processo de mesclagem reversa é realizado após a branch release já ter sido mesclada em main. Primeiro, release é mesclada em develop, depois é excluída. Isso garante que develop contenha todas as correções feitas durante a preparação da release.
Após a mesclagem reversa, podem ocorrer conflitos — especialmente se novas branches feature que modificaram os mesmos arquivos já apareceram em develop. O desenvolvedor responsável pela release resolve esses conflitos e envia develop para o servidor.
Algumas equipes usam rebase em vez de merge para a mesclagem reversa, para manter um histórico linear. No entanto, merge é mais seguro para develop, pois não reescreve o histórico de commits que outros desenvolvedores já podem estar usando.
Vamos examinar o ciclo completo de trabalho com uma branch release: desde a criação até a exclusão após uma release bem-sucedida de um aplicativo móvel versão 2.5.0.
# 1. Criar branch release a partir de develop
git checkout develop
git pull origin develop
git checkout -b release/2.5.0
# 2. Atualizar versão e correções
git add build.gradle
git commit -m "Bump version to 2.5.0"
# 3. Corrigir bugs (apenas bugfixes)
git add src/fix/
git commit -m "Fix crash on payment screen"
# 4. Enviar branch release para o servidor
git push origin release/2.5.0
# 5. Mesclar release em main
git checkout main
git pull origin main
git merge --no-ff release/2.5.0
git tag -a v2.5.0 -m "Release 2.5.0"
git push origin main --tags
# 6. Mesclagem reversa em develop
git checkout develop
git merge --no-ff release/2.5.0
git push origin develop
# 7. Excluir branch release
git branch -d release/2.5.0
git push origin --delete release/2.5.0
Os comandos 5 e 6 — a fusão dupla — são criticamente importantes. Primeiro, main recebe o código de release e a tag, depois develop é sincronizada com as correções de release. Se o passo 6 for ignorado, as correções da release não chegarão ao próximo ciclo de desenvolvimento.
Para projetos móveis com releases regulares, o processo de criar uma branch release e atualizar a versão pode ser automatizado por meio de scripts CI/CD. O GitHub Actions permite criar um workflow que, ao clicar em um botão, cria uma branch release com atualização automática de versão.
Para projetos móveis com releases regulares, o processo de criar uma branch release e atualizar a versão pode ser automatizado por meio de scripts CI/CD. O GitHub Actions permite criar um workflow que, ao clicar em um botão, cria uma branch release com atualização automática de versão.
# GitHub Actions — automatização da criação de branch release
name: Create Release Branch
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. 2.5.0)'
required: true
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create release branch
run: |
git checkout develop
git checkout -b release/${{ inputs.version }}
git push origin release/${{ inputs.version }}
Perguntas frequentes
Apenas uma branch release por vez, se você seguir o Git Flow. Ter duas branches release ativas significa que a equipe está tentando lançar duas versões em paralelo — isso viola o princípio de releases sequenciais e cria confusão com as versões.
Remova os commits da funcionalidade incompleta da branch release usando git revert e adie a funcionalidade para a próxima release. Nunca publique funcionalidade incompleta em produção — a dívida técnica e os possíveis bugs não valem a pressa.
Para releases simples com uma única correção, a branch release pode ser pulada e mesclada diretamente de develop para main. No entanto, para releases padrão, a branch release é obrigatória — ela fixa a versão, isola a preparação e garante a fusão dupla das correções.
Use git revert em main para criar um novo commit que desfaça todas as alterações da release. Em seguida, exclua a tag de release com git push origin --delete vX.Y.Z. Depois de corrigir os problemas, crie uma nova branch release com um número de patch incrementado.
Um release candidate (RC) é um artefato de compilação que passa pelos testes finais. Uma release branch é uma branch Git a partir da qual o release candidate é construído. Uma mesma branch release pode gerar múltiplas compilações RC (RC1, RC2, etc.) à medida que os bugs são corrigidos.
Resumo
release/X.Y.Z com número de versão SemVer.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