Como reverter arquivos e pastas individuais para versões anteriores no Git

0
39


O Git é uma ferramenta poderosa para rastrear todas as versões de sua base de código, e muitas vezes é necessário olhar para trás no tempo e recuperar versões antigas de arquivos. O Git pode reverter commits completos ou redefinir todo o repositório, mas também pode reverter alterações em um único arquivo ou pasta.

reverso vs. Reintegração

Normalmente, quando você “reverte” um commit, o Git aplica um novo commit aplicando as alterações opostas, efetivamente desfazendo-o. Isso é útil se você cometer um erro e precisar “remover” esse commit, mesmo que ainda esteja registrado no histórico.

Redefinir o repositório é um pouco diferente. Você só pode reverter um commit por vez, mas se você fizer um git reset, o Git mudará completamente o estado do repositório para quando o commit foi feito. Isso é feito por vários motivos, geralmente para remover commits ou corrigir o histórico de branch.

Ambas as operações funcionam em todo o repositório, mas você também pode usar comandos semelhantes para executar as mesmas ações em arquivos ou pastas individuais. Por exemplo, usando git reset em um único arquivo irá definir esse arquivo de volta ao que era quando o commit foi feito. Isso é útil se você deseja apenas selecionar uma versão mais antiga do arquivo do seu histórico do Git.

RELACIONADO: Como o Git reset realmente funciona? Reinicializações suaves, difíceis e mistas explicadas

RELACIONADO: Como corrigir, editar ou reverter commits do Git (alteração do histórico do Git)

Olhando para versões antigas no Git

A solução de baixa tecnologia para redefinir um arquivo do jeito que costumava ser é bem simples: o Github e a maioria dos outros servidores Git acompanham seu histórico de arquivos, e você pode simplesmente clicar em um commit e clicar em “Procurar”. um instantâneo do seu repositório de volta no tempo. Você pode então baixar o arquivo ou copiar o texto.

Isso é especialmente útil se você estiver trabalhando com arquivos de código grandes e quiser ver versões mais antigas das funções que você escreveu. Você provavelmente não deseja reverter tudo nesse caso, apenas a única função. Você pode copiar o código dessa função sem tocar na CLI do Git.

Restaurar um arquivo para uma versão anterior no Git

Neste repositório de teste, fizemos um commit que editou o README e adicionou um novo arquivo. Queremos reverter as alterações feitas no README, mas não queremos redefinir todo o repositório para o commit inicial.

A solução é restaurar apenas o README verificando uma versão anterior desse arquivo. de git checkout O comando faz muitas coisas, como alternar ramificações, mas basicamente é usado para baixar arquivos com um ID de confirmação ou ramificação.

Para restaurar um arquivo para uma versão anterior, você precisará encontrar o ID do commit do qual deseja restaurá-lo. Você pode usar git log para isso, defina um único arquivo para ver apenas as alterações feitas nesse arquivo:

git log README.md

Copie o ID para confirmação e execute git checkout com o ID e caminho do arquivo:

git checkout 22710694b25d7ce5297559851beb7d3e4de811bb README.md

Isso mudará o arquivo de volta, mas não confirmará as alterações ainda. Você é livre para editar e confirmar quando estiver pronto.

Neste exemplo, git checkout encenou as mudanças para o próximo commit. Se você não quiser confirmá-los, você pode descartar as alterações. Isso pode ser útil para baixar temporariamente versões antigas de arquivos sem o uso do Github.

Revertendo alterações em arquivos individuais

Da mesma forma, se você quiser reverter as alterações em um único commit, você pode fazer isso com git revert. No entanto, não há como aplicá-lo a um único arquivo, mas você pode simplesmente descartar as alterações se o commit afetar outros arquivos.

Use o --no-commit sinalizador para permitir a edição do “commit rollback” que o Git cria automaticamente.

git revert de8564b131ca6a15a7e7c73f5ef156b119cc0b93

Isso permitirá que você altere os arquivos antes que a reversão seja concluída. Se houver alterações indesejadas preparadas, você pode excluí-las através do seu cliente ou com um formulário vazio git checkout.

git checkout -- file