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
.git
para 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.