Featured image of post Git Revert de Vários Commits com Git Restore

Git Revert de Vários Commits com Git Restore

Domine a arte de reverter para um ponto específico com um único comando usando git restore.

Introdução Link to this section

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 Link to this section

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 Link to this section

Uma abordagem típica envolve o uso de git revert para criar um commit que reverte as alterações de um intervalo de commits:

1
2
# Reverte um intervalo de commits
git revert 4dbcaf5419d5b5aa19776d7ed733a163cacd95fe..dbffeb4da345fd0c66b0b7a8193a6582b409cd4a

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 Link to this section

Uma solução mais simples, mas menos eficiente, envolve verificar manualmente a branch ou commit desejado em uma pasta separada:

1
2
# Clona o repositório e faz checkout da branch
git clone {repo} -b main ./mainBranch

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:

1
2
# Commita as alterações revertidas
git commit -am "Reverte as alterações"

⚠️ NÃO copie o diretório .git para evitar alterar o índice do Git.

A Solução Mais Simples Link to this section

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 Link to this section

1
2
3
4
5
# Atualiza as referências da branch local
git fetch --all

# Restaura arquivos da branch de origem
git restore --source=origin/main .

Exemplo: Restaurar Arquivos Específicos Link to this section

Você também pode restaurar arquivos específicos ou usar um padrão GLOB para filtrar arquivos:

1
2
3
4
5
# Atualiza as referências da branch local
git fetch --all

# Restaura um arquivo específico
git restore --source=origin/main index.html

Esta abordagem é eficiente, minimiza erros e funciona perfeitamente com branches protegidas.

Referências Link to this section

💬 Like or have something to add? Leave a comment below.
Ko-fi
GitHub Sponsor
Licensed under CC BY-NC-SA 4.0
Criado com Hugo
Tema Stack desenvolvido por Jimmy