Rollback no desenvolvimento: o que é, métodos e como funciona

Autor: IT Sectr Publicado: 2026-07-30 Tempo de leitura: 7 min

“Rollback” e “reverter” são termos que significam retornar um sistema, código ou dados a um estado anterior. No desenvolvimento, esta é uma operação fundamental incorporada aos sistemas de controle de versão, bancos de dados e mecanismos de implantação. De acordo com a Documentação do Git, as operações de rollback podem ser seguras (revert criando um novo commit) e destrutivas (reset com perda de histórico). Compreender as diferenças entre elas ajuda a evitar perda de dados ao reverter para uma versão anterior.

Pontos Principais

  • Rollback — retornar código ou dados a uma versão estável anterior
  • Git revert cria um novo commit que desfaz as alterações — um método seguro de rollback
  • Git reset move o ponteiro do branch para trás e pode excluir o histórico de commits
  • Rollback em BD cancela uma transação incompleta, restaurando os dados
  • A escolha do método de rollback depende se você trabalha sozinho ou em equipe

O que é rollback no desenvolvimento

Rollback é uma operação que retorna o sistema a um estado estável anterior. No contexto do desenvolvimento, isso pode significar desfazer um commit no Git, reverter uma transação no banco de dados ou retornar a uma versão anterior de um aplicativo no servidor. O termo vem do inglês “rollback” e está firmemente estabelecido no vocabulário dos desenvolvedores de todas as plataformas.

A necessidade de um rollback surge quando uma nova alteração quebra a funcionalidade, causa erros ou falha nas verificações de qualidade. Em um processo de desenvolvimento bem organizado, o rollback não é um sinal de falha, mas um procedimento padrão incorporado ao fluxo de trabalho. Quanto mais rápida uma equipe puder reverter uma alteração problemática, menor será o impacto do bug nos usuários.

Diferentes ferramentas oferecem diferentes mecanismos de rollback: o Git oferece uma escolha entre revert seguro e reset destrutivo, os bancos de dados suportam rollback transacional, e os sistemas CI/CD podem alternar o tráfego entre versões. A escolha da abordagem depende do contexto e dos requisitos de preservação do histórico de alterações.

Git revert vs git reset: qual a diferença

Git revert é um método seguro de rollback que cria um novo commit desfazendo as alterações anteriores. O histórico permanece linear e todos os commits antigos são preservados. Esta é a única escolha correta para reverter em um branch compartilhado no qual vários desenvolvedores trabalham. Git revert não exclui o histórico — ele adiciona o fato do rollback como uma nova alteração.

Git reset move o ponteiro do branch atual para um commit específico, descartando todas as alterações subsequentes. Dependendo da flag — soft, mixed ou hard — o reset lida com o diretório de trabalho e o índice de forma diferente. O modo hard remove completamente as alterações do histórico, tornando-o perigoso para branches compartilhados e adequado apenas para trabalho local.

Quando usar revert

Revert é usado em branches compartilhados: main, develop, release. Ele preserva o histórico e permite que outros desenvolvedores entendam que uma alteração foi desfeita. Após o revert, você pode fazer git pull com segurança — o sistema não produzirá conflitos relacionados ao histórico reescrito. No trabalho em equipe, revert é o padrão por omissão.

bash
# Desfazer o último commit criando um novo commit
git revert HEAD

# Desfazer um commit específico por hash
git revert a1b2c3d

Quando usar reset

Reset é apropriado em um branch local onde você ainda não publicou alterações. Se você estava experimentando e quer limpar completamente o histórico — reset hard fará isso. Em um branch local, você pode usar reset mixed para desfazer commits mas manter as alterações no diretório de trabalho para recommitar.

bash
# Desfazer o último commit, manter alterações no diretório de trabalho
git reset HEAD~1

# Desfazer completamente — as alterações são removidas permanentemente
git reset --hard HEAD~2

Rollback em bancos de dados: transações e ACID

Rollback de transação é uma operação que desfaz todas as alterações feitas dentro da transação atual e retorna o banco de dados ao estado no início da transação. Isso garante a atomicidade — um dos quatro princípios ACID (Atomicity, Consistency, Isolation, Durability). Se ocorrer um erro em qualquer estágio da transação, um rollback é executado e os dados retornam ao seu estado original.

O mecanismo de rollback é implementado através do log de escrita antecipada (Write-Ahead Log, WAL). Antes de modificar uma página de dados, o SGBD escreve os valores antigos e novos no log. Durante o rollback, o sistema lê o log e restaura os valores originais para todas as páginas modificadas. Isso garante que mesmo em caso de falha de energia, a transação possa ser corretamente desfeita.

sql
BEGIN TRANSACTION;

UPDATE accounts
SET balance = balance - 100
WHERE id = 1;

-- Rollback on error
ROLLBACK;

Savepoint: rollback parcial

Em transações longas, é conveniente usar savepoints — pontos de salvamento intermediários para os quais você pode reverter sem concluir toda a transação. Isso permite lidar com erros dentro de uma operação complexa sem perder o progresso em outras partes. Os savepoints são suportados pela maioria dos SGBDs relacionais: PostgreSQL, MySQL, Oracle.

sql
SAVEPOINT sp1;

UPDATE orders SET status = 'cancelled'
WHERE id = 42;

ROLLBACK TO sp1;

Rollback em implantação: estratégias e ferramentas

Rollback de implantação é retornar um aplicativo em execução a uma versão anterior após uma implantação mal-sucedida. Esta é uma capacidade crítica para ambientes de produção: o tempo de recuperação (MTTR) afeta diretamente o SLA e a experiência do usuário. As plataformas modernas oferecem várias estratégias de rollback dependendo da arquitetura e dos requisitos de disponibilidade.

Blue-green deployment

Blue-green é uma estratégia onde dois ambientes idênticos funcionam simultaneamente: blue (versão atual) e green (nova versão). O tráfego muda para green após uma implantação bem-sucedida. Se a nova versão funcionar incorretamente, o comutador de tráfego retorna para blue. O rollback é realizado instantaneamente, sem reimplantação — basta alterar o roteamento.

Canary release com rollback automático

Canary deployment direciona uma pequena parte do tráfego para a nova versão e monitora métricas: taxa de erros, tempo de resposta, percentual de solicitações bem-sucedidas. Se as métricas piorarem, o sistema reverte automaticamente o canary e direciona todo o tráfego para a versão estável. Kubernetes e malhas de serviço (Istio, Linkerd) suportam essa estratégia nativamente.

yaml
apiVersion: apps/v1
kind: Deployment
spec:
  replicas: 10
  strategy:
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

Exemplos práticos de rollback no desenvolvimento

Vamos examinar três cenários típicos em que um desenvolvedor precisa reverter alterações. Cada cenário requer sua própria abordagem — desde um simples comando no terminal até um procedimento de várias etapas envolvendo CI/CD.

Cenário 1: commit acidental no main

Você acidentalmente enviou um commit com um bug para o main. Sua tarefa é reverter as alterações sem perder o histórico para a equipe. Use git revert para criar um commit de reversão e depois git push. Todos os membros da equipe verão o rollback e poderão continuar trabalhando sem conflitos. Este é o método mais seguro e transparente.

bash
git checkout main
git pull origin main
git revert HEAD
git push origin main

Cenário 2: migração de banco de dados falha

Uma migração de banco de dados falhou e alguns dados estão corrompidos. Use rollback transacional no script de migração e restaure a partir do backup para alterações já aplicadas. Em um sistema bem projetado, cada migração é envolvida em uma transação — em caso de erro, o SGBD realiza automaticamente um rollback.

Cenário 3: implantação com bug crítico

Após implantar uma nova versão, você descobre que a autorização não está funcionando. Se você usa blue-green, o rollback é alternar o roteador de volta. Se for atualização contínua — o comando kubectl rollout undo retornará a versão anterior. Idealmente, o processo de rollback deve ser automatizado e não levar mais de um minuto.

Perguntas Frequentes

Qual a diferença entre git revert e git reset?

Revert cria um novo commit que desfaz as alterações e preserva o histórico. Reset move o ponteiro do branch para trás e pode excluir commits. Para branches compartilhados, use apenas revert.

É possível recuperar dados após git reset --hard?

Se os commits não foram coletados pela coleta de lixo do Git, eles podem ser restaurados através do git reflog. No entanto, após a coleta de lixo, a recuperação se torna impossível. Use --hard apenas em branches locais.

Como funciona o rollback em uma transação SQL?

Rollback desfaz todas as alterações feitas na transação atual usando o log de escrita antecipada (WAL). O SGBD restaura os valores originais para todas as páginas de dados modificadas.

O que é um savepoint e para que serve?

Savepoint é um ponto de salvamento intermediário dentro de uma transação. Permite reverter parcialmente para ele sem cancelar toda a transação. útil em operações longas com múltiplas etapas.

Como automatizar o rollback em CI/CD?

Configure health checks e monitoramento de métricas após a implantação. Quando o limite de erros for excedido, acione um rollback automático através de um script ou ferramenta como Spinnaker, ArgoCD ou GitLab Auto Rollback.

Resumo

  • Rollback — retornar código, dados ou aplicativo a uma versão estável anterior
  • Git revert — rollback seguro para trabalho em equipe com preservação do histórico
  • Git reset — rollback destrutivo adequado apenas para branches locais
  • Rollback em BD é baseado no log WAL e garante atomicidade das transações
  • Savepoint permite rollback parcial de uma transação longa
  • Blue-green e canary — estratégias de implantação com rollback instantâneo
  • Automatize o rollback com base em métricas para minimizar o tempo de recuperação

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.

Discutir o projeto

Leia também