Introdução
Branches protegidas, como develop e main, são cruciais para manter a integridade do seu repositório. Essas branches não podem ser resetadas ou ter push forçado devido a restrições, tornando essencial a criação de novos commits para desfazer as alterações.
Este post explora um método simples para reverter alterações, usando o comando git restore, especialmente ao lidar com modificações grandes ou complexas.
Por que Revert é Importante
Reverter alterações é uma tarefa comum no desenvolvimento de software, especialmente ao depurar ou reverter modificações não intencionais. Para branches protegidas, a reversão deve ser feita com cuidado para preservar o histórico da branch e evitar conflitos.
A Solução Comum
Uma abordagem típica envolve o uso de git revert para criar um commit que reverte as alterações de um intervalo de commits:
| |
No entanto, este método requer analisar o log para identificar os commits a serem revertidos, o que é propenso a erros. Torna-se ainda mais desafiador quando commits de merge estão envolvidos, pois eles têm dois pais, e o git revert requer a especificação de um pai. Como as branches protegidas geralmente incluem commits de merge, isso adiciona complexidade.
A Solução Ingênua
Uma solução mais simples, mas menos eficiente, envolve verificar manualmente a branch ou commit desejado em uma pasta separada:
| |
Exclua manualmente todos os arquivos, exceto o diretório .git (para remover os arquivos adicionados nos commits que estão sendo revertidos) e copie o conteúdo da branch de destino, garantindo que o diretório .git não seja copiado. Em seguida, faça commit das alterações:
| |
⚠️ NÃO copie o diretório
.gitpara evitar alterar o índice do Git.
A Solução Mais Simples
O comando git restore simplifica este processo, copiando arquivos da branch source para a branch atual sem modificar o índice do Git (ao contrário de git checkout ou git reset).
Exemplo: Restaurar a Branch Inteira
| |
Exemplo: Restaurar Arquivos Específicos
Você também pode restaurar arquivos específicos ou usar um padrão GLOB para filtrar arquivos:
| |
Esta abordagem é eficiente, minimiza erros e funciona perfeitamente com branches protegidas.
