Este workflow utiliza uma abordagem baseada em Git Flow, adaptada para desenvolvimento Android. A seguir, descrevemos cada branch e seu propósito.
Branch principal (master)
Contém o código estável em produção. Novas versões são mescladas aqui e etiquetadas com tags após lançamentos.
| Origem | Padrão de Nomes | Exemplo | Destino de Merge | Ambiente |
|---|---|---|---|---|
| — | — | — | — | Produção |
Branch de desenvolvimento (develop)
Criada a partir de master, representa o código em progresso para a próxima versão. É a base para desenvolvimento colaborativo.
| Origem | Padrão de Nomes | Exemplo | Destino de Merge | Ambiente |
|---|---|---|---|---|
| master | — | — | release-versao | Desenvolvimento |
Branch de funcionalidade (feature)
Utilizada para desenvolver novas funcionalidades. Pode ser descartada ou mesclada em develop após conclusão.
| Origem | Padrão de Nomes | Exemplo | Destino de Merge | Ambiente |
|---|---|---|---|---|
| develop | feature-versao | feature-2.0.0 | develop | Desenvolvimento |
Branch de pré-lançamento (release)
Destinada a testes finais antes da publicação. Permite ajustes em metadados como versão do aplicativo.
| Origem | Padrão de Nomes | Exemplo | Destino de Merge | Ambiente |
|---|---|---|---|---|
| develop | release-versao | release-2.0.0 | develop e master | Testes |
Branch de correção pré-lançamento (releace-fix)
Usada para corrigir bugs identificados durante testes na branch release.
| Origem | Padrão de Nomes | Exemplo | Destino de Merge | Ambiente |
|---|---|---|---|---|
| release | release-fix-versao | release-fix-2.0.0 | release | Testes |
Branch de correção de bugs (fix)
Destinada a resolver problemas encontrados em produção. Diferencia-se de hotfixes em contextos Android.
| Origem | Padrão de Nomes | Exemplo | Destino de Merge | Ambiente |
|---|---|---|---|---|
| master | fix-versao | fix-2.0.1 | release | Testes |
Branch de refatoração (refactor)
Utilizada para melhorar código existente, sem necessidade de inclusão imediata na próxima versão.
| Origem | Padrão de Nomes | Exemplo | Destino de Merge | Ambiente |
|---|---|---|---|---|
| develop | refactor-descricao | refactor-interface | develop | Desenvolvimento |
Convenções de Commits
Adote prefixos descritivos para mensagens de commmit:
feat:nova funcionalidadefix:correção de bugdocs:alterações em documentaçãostyle:formatação (não afeta execução)refactor:refatoração de códigotest:adição ou modificação de testeschore:ajustes em build ou ferramentas
Exemplo: fix(perfil): resolver crash ao carregar foto
Fluxo de Trabalho Prático
Inicialização do Projeto
Crie a branch master e, a partir dela, inicialize develop.
Desenvolvimento de Funcionalidades
- Crie
feature-versaoa partir dedevelop. Para equipes, use ramificações individuais comofeature-versao-nome. - Realize commits e pushes na branch individual para sincronização.
- Após conclusão, mescle as ramificações em
feature-versao, integre mudanças dedevelope resolva conflitos. - Envie um Merge Request (MR) para
develope delete a branch de funcionalidade.
Testes e Correções
- Ao aceitar MRs em
develop, crierelease-versaopara testes. - Para bugs reportados, crie
release-fix-versaoa partir derelease-versao, corrija e envie MR de volta. - Repita até aprovação dos testes.
Lançamento
- Compile o pacote de produção a partir de
release-versao. - Envie MR para
mastere crie uma tag (ex:v2.0.0). - Integre mudanças em
develope deleterelease-versao.
Correções em Produção
- Crie
fix-versaoa partir demaster, corrija o bug e envie MR pararelease-versao. - Siga o processo de testes similar ao lançamento.
- Para bugs críticos, atualize metadados e publique imediatamente.
Refatorações
- Crie
refactor-descricaodedevelop. - Implemente melhorias, teste e envie MR para
develop.
Revisão de Código e Boas Práticas
Em projetos com múltiplos desenvolvedores, realize revisões de código via MR para garantir qualidade e consistência.
No Android Studio, ao atualizar código (pull), selecione Merge e Using Stash para evitar conflitos. Evite Rebase para manter histórico claro.
Comandos Git Essenciais
Criação e Manipulação de Branches
# Criar e mudar para nova branch
git checkout -b nova-branch
# Mesclar branch atual com outra
git merge --no-ff outra-branch
# Deletar branch local
git branch -d branch-local
# Deletar branch remota
git push origin --delete branch-remota
Gerenciamento de Alterações
# Armazenar alterações temporariamente
git stash
# Listar stashs
git stash list
# Aplicar stash específico
git stash apply stash@{0}
# Descartar alterações no diretório de trabalho
git checkout -- arquivo.txt
# Resetar para commit específico
git reset --hard commit-id
Comandos para Commits
# Modificar último commit
git commit --amend -m "nova mensagem"
# Rebase interativo para ajustar commits
git rebase -i HEAD~3
# Cherry-pick de commit de outra branch
git cherry-pick commit-id
Dicas para Evitar Conflitos
- Sincronize com o repositório remoto antes de iniciar trabalho e antes de cada commmit.
- Divida alterações em commits pequenos e descritivos.
- Comunique alterações em arquivos compartilhados imediatamente à equipe.
- Defina responsabilidades claras para evitar sobreposições.
Operações Avançadas
Limpeza do Diretório de Trabalho
O comando git clean remove arquivos não rastreados. Use com cautela, pois deleta permanentemente.
# Visualizar arquivos a serem removidos
git clean -n
# Remover arquivos não rastreados
git clean -f
# Remover também diretórios não rastreados
git clean -df
Revertendo Alterações
Para desfazer commits já enviados ao remoto, use git revert para criar um novo commit que anula mudanças, ou git reset seguido de push forçado para remover commits.
# Reverter commit específico
git revert commit-id
# Resetar e forçar push
git reset --hard commit-id
git push origin branch --force
Use git reset --soft para manter alterações no diretório de trabalho ao desfazer commits.