A mentalidade de branch protegido e por que ela é inegociável.
"Main sempre verde" significa uma coisa: a qualquer momento, o branch main pode ser implantado em produção. Não "funciona na maioria das vezes", não "funciona se você souber quais commits pular" — implantável. Agora mesmo. Sem intervenção manual.
Esse é um padrão mais alto do que a maioria das equipes percebe. Significa que cada commit no main passou por testes automatizados, foi revisado por um humano e não depende de trabalho incompleto de outro branch. Significa que você pode fazer deploy na sexta-feira às 16h sem ansiedade, porque o main não é um trabalho em andamento — é o produto finalizado em cada commit.
O mecanismo que garante isso é a integração contínua (CI). Cada PR executa a suíte de testes, o linter e o verificador de tipos antes de poder fazer merge. Se alguma verificação falhar, o PR é bloqueado. O desenvolvedor corrige o problema no seu branch — não no main, não depois do merge, não "mais tarde". A CI é o guardião que garante que o main nunca se degrade.
Equipes sem essa disciplina regularmente se encontram em um estado onde o main está quebrado e ninguém sabe qual dos últimos cinco merges causou isso. Nesse ponto, todos na equipe estão bloqueados — não podem puxar código novo, não podem iniciar novos branches a partir de um estado funcional e não podem fazer deploy. O custo de um main vermelho não é problema de um desenvolvedor. É problema de toda a equipe, se agravando a cada minuto que permanece quebrado.
Regras de proteção de branch são a aplicação automatizada de "main sempre verde". Todas as principais plataformas de hospedagem Git — GitHub, GitLab, Bitbucket — as suportam, e elas devem ser configuradas no primeiro dia de qualquer projeto sério.
As três regras que mais importam:
Algumas equipes resistem às regras de proteção porque parecem atrito. Elas são atrito — atrito intencional que previne a classe mais cara de erros. Configurar essas regras leva cinco minutos. Recuperar-se de um force-push que sobrescreve o trabalho de um colega leva horas, mais o dano à confiança. A matemática não é difícil.
Quando um deploy quebra a produção, os desenvolvedores enfrentam uma escolha: corrigir para frente ou reverter. O instinto é quase sempre corrigir para frente — encontrar o bug, escrever um patch, fazer push. Mas esse instinto está errado sob pressão.
Um revert é um único comando que desfaz um commit conhecido de forma limpa:
git revert abc123f
# Creates a new commit that undoes abc123f
# Main is green again in minutes
A alternativa de correção em pânico se parece com isso: um desenvolvedor curvado sobre o teclado às 23h, escrevendo código novo sob pressão, pulando testes porque "é só uma correção de uma linha", fazendo push direto para o main porque "não temos tempo para um PR". Essa correção de uma linha introduz um segundo bug 40% das vezes, porque código escrito sob adrenalina é código escrito sem contexto completo.
A regra é simples: reverta primeiro, corrija depois. Deixe o main verde novamente imediatamente — isso desbloqueia toda a equipe e estanca o sangramento. Então, com a pressão aliviada, escreva uma correção adequada em um branch com testes, revisão e CI. A correção é enviada uma hora ou um dia depois, mas é enviada corretamente.
Reverts parecem admitir falha. Não são. São o caminho mais rápido de volta a um estado funcional, e deixam o commit original no histórico como documentação do que deu errado. Uma equipe que reverte rapidamente é uma equipe que faz deploy com confiança, porque o custo de um deploy ruim é minutos de inatividade em vez de horas de combate a incêndios.
Se o main está quebrado, a equipe está bloqueada
Cada minuto que o main está vermelho, cada desenvolvedor puxando trabalho novo está bloqueado. É por isso que as regras de proteção existem.