Exercício – Usar o Git para corrigir erros

Concluído

Agora, vamos fazer exercícios práticos de correção de erros.

Praticar a recuperação de um arquivo excluído

  1. Primeiro, tente excluir index.html:

    rm index.html
    

    Isso pode parecer uma péssima ideia, mas lembre-se: o Git dá toda proteção a você.

  2. Use um comando ls para verificar se index.html foi excluído:

    ls
    
  3. A saída a seguir será exibida. Observe que agora não há nenhum arquivo index.html.

    CSS
    
  4. Vamos recuperar index.html. Use git checkout para trazer index.html de volta:

    git checkout -- index.html
    
  5. Use ls novamente para verificar o conteúdo do diretório atual. Será que index.html foi restaurado?

    Sim! Agora, a saída terá um arquivo index.html e um diretório CSS:

    CSS  index.html
    

Praticar a recuperação de um arquivo que foi excluído: git rm

Quando você quiser recuperar arquivos excluídos, as coisas ficarão um pouco mais complicadas se você excluí-los usando git rm em vez de rm.

  1. Para ver o que acontece, experimente este comando:

    git rm index.html
    
  2. Novamente, procure index.html executando ls. Você não verá index.html.

  3. Tente recuperar index.html como da última vez:

    git checkout -- index.html
    
  4. Desta vez, o Git indica que não sabe nada sobre index.html. Isso porque o Git não só excluiu o arquivo, mas registrou a exclusão no índice:

    error: pathspec 'index.html' did not match any file(s) known to git.
    
  5. Remova o preparo da exclusão de index.html com o comando git reset:

    git reset HEAD index.html
    
  6. Verifique esta saída, que o confirma:

    Unstaged changes after reset:
    D       index.html
    
  7. Agora, você pode recuperar o arquivo do índice com o comando usado antes:

    git checkout -- index.html
    

    git reset removeu o preparo da alteração, mas o arquivo ainda foi excluído, portanto, você precisava usar checkout para recuperá-lo.

  8. Verifique mais uma vez se isso funcionou executando ls.

Reverter um commit

Agora, vamos tornar as coisas mais complicadas. Suponha que você substitua acidentalmente um arquivo por outro ou faça uma alteração em um arquivo que acabe se tornando um grande erro. Você deseja reverter esse arquivo para a versão anterior, mas já fez commit das alterações. Nesse caso, um git checkout simples não produzirá o efeito desejado.

Uma solução para esse problema é reverter o commit anterior.

  1. Abra index.html com code:

    code index.html
    
  2. Substitua o conteúdo de index.html por este código:

    <h1>That was a mistake!</h1>
    
  3. Salve e feche o arquivo.

  4. Use estes comandos para fazer commit das alterações e mostrar o commit mais recente:

    git commit -m "Purposely overwrite the contents of index.html" index.html
    git log -n1
    

    O sinalizador -n1 aqui informa o Git de que queremos apenas obter a entrada de commit mais recente.

  5. Use os seguintes comandos para tentar restaurar index.html:

    git checkout -- index.html
    
  6. Abra index.html no editor:

    code index.html
    

    Qual versão de index.html é exibida? A versão antiga ou a nova versão?

    Nessa situação, a melhor decisão a ser tomada é reverter a alteração fazendo outro commit que cancele o primeiro. Esse é um trabalho para git revert.

  7. Feche o arquivo e use git revert para desfazer as alterações confirmadas:

    git revert --no-edit HEAD
    

    O sinalizador --no-edit informa o Git de que não queremos adicionar uma mensagem de commit a esta ação.

  8. Verifique a saída. Ela será semelhante a este exemplo:

    [main 6a27310] Revert "Purposely overwrite the contents of index.html"
    1 file changed, 13 insertions(+), 1 deletion(-)
    
  9. Acompanhe isso com um comando git log para mostrar o commit mais recente:

    git log -n1
    
  10. Verifique a saída novamente. Ele será semelhante a este exemplo:

    Author: User Name <user-name@contoso.com>
    Date:   Tue Nov 19 23:42:26 2019 +0000
    
    Revert "Purposely overwrite the contents of index.html"
    
    This reverts commit 15d3bded388470c98881a632025bc15190fe9d17.
    
  11. Por fim, abra o arquivo index.html para ter certeza de que o conteúdo é a versão correta.

A reversão não é a única maneira de corrigir essa situação. Você pode apenas editar index.html e fazer commit do arquivo corrigido. Essa opção é mais difícil se as alterações que você confirmou eram extensas. De qualquer modo, git revert é uma boa maneira de indicar sua intenção.