Recuperar dados específicos usando comandos do Git

Concluído

A capacidade de recuperar dados usando comandos do Git é crucial para os desenvolvedores reverterem alterações acidentais, restaurarem arquivos excluídos ou recuperarem os commits perdidos. Ela contribui para minimizar o tempo de inatividade inesperado e garantir a continuidade do projeto. No entanto, embora seus benefícios sejam claros, é importante apontar seus riscos potenciais. Ao aplicar o comando do Git descrito nesta unidade, é essencial ter o devido cuidado, especialmente ao manipular o histórico de commit ou reverter alterações, pois erros podem levar à perda de dados.

Comandos de recuperação de dados do Git

Os comandos do Git que tratam da recuperação de dados podem ser agrupados em várias categorias, incluindo recuperação de commit, arquivos, linhas específicas de código e commits ou ramificações excluídas.

Recuperando commits

  • git log: lista o histórico de commit de um repositório. Você pode navegar pelo registro para encontrar o commit que deseja recuperar.
  • git checkout <commit>: alterna para um commit específico, efetivamente "recuperando" o estado do repositório nesse commit.
  • git cherry-pick <commit>: aplica as alterações introduzidas por um commit específico em sua ramificação atual.

Recuperar arquivos

  • git checkout <commit><file>: restaura um arquivo específico de um commit anterior.
  • git restore <file>: descarta as alterações locais e restaura o arquivo ao seu último estado confirmado, supondo que você ainda não tenha confirmado as alterações.

Recuperar linhas de código específicas

  • git blame <file>: exibe a revisão e o autor de cada linha em um arquivo, ajudando você a identificar o commit que introduziu uma alteração específica.
  • git show <commit>: <file>: exibe o conteúdo de um arquivo em um commit específico. Você pode especificar o commit e o caminho do arquivo para ver o conteúdo como ele existia naquele momento.

Recuperar os commits ou ramificações excluídos

  • git reflog: exibe um registro de todos os commits. Você pode usá-lo para encontrar o hash SHA-1 de um commit ou ramificação excluídos anteriormente e, em seguida, fazer check-out ou restaurá-lo.
  • git fsck --lost-found: verifica a integridade do repositório e lista todas os commits que não podem ser acessados de nenhuma ramificação ou tag. Você pode usá-lo para recuperar os commits perdidos.

Lembre-se de usar esses comandos com cuidado, especialmente ao manipular o histórico de confirmação ou reverter alterações. Certifique-se sempre de criar um backup do repositório antes de iniciar ou use git stash para salvar as alterações atuais antes de tentar qualquer operação de recuperação.

Cenário de exemplo

Vamos percorrer um exemplo de cenário que ilustra o processo de uso de comandos do Git para recuperar um arquivo excluído. Presumimos que um arquivo chamado example.txt que reside em seu repositório do Git foi excluído acidentalmente e você precisa recuperá-lo.

Exibir o histórico de commit:

  • Comece exibindo o histórico de commit:
    git log
  • Na listagem do histórico de commit, identifique o hash SHA-1 do commit onde o arquivo example.txt esteve presente pela última vez.

Restaurando o arquivo excluído:

  • Depois de identificar o hash SHA-1 do commit, use o check-out do Git para restaurar o arquivo:
    git checkout <commit_SHA>^ -- example.txt
  • Substitua <commit_SHA> pelo hash SHA-1 do commit. O símbolo ^ indica o pai desse commit, restaurando efetivamente o arquivo para seu estado antes da exclusão.

Verificando alterações:

  • Após restaurar o arquivo, verifique se ele foi restaurado com sucesso verificando o status do repositório:
    git status
  • Valide esse example.txt listado como um arquivo modificado ou não rastreado.

Preparação e confirmação de alterações:

  • Se o arquivo estiver listado como modificado, prepare-o para confirmação:
    git add example.txt
  • Confirme as alterações com uma mensagem do commit apropriada:
    git commit -m "Restored example.txt"