Exercício - Use o Git para corrigir erros

Concluído

Agora, vamos começar alguns práticos corrigindo nossos erros!

Praticar a recuperação de um ficheiro eliminado

  1. Primeiro, tente excluir index.html:

    rm index.html
    

    Pode parecer uma má ideia, mas lembre-se: o Git tem as suas costas!

  2. Utilize um comando ls para verificar se o index.html foi eliminado:

    ls
    
  3. Deverá ver o seguinte resultado. Note que agora, não há nenhum arquivo index.html !

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

    git checkout -- index.html
    
  5. Utilize novamente ls para verificar o conteúdo do diretório atual. O ficheiro index.html foi restaurado?

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

    CSS  index.html
    

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

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

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

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

  3. Tente recuperá index.html da mesma forma que fez da última vez:

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

    error: pathspec 'index.html' did not match any file(s) known to git.
    
  5. Anule a preparação da eliminação do ficheiro index.html com o comando git reset:

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

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

    git checkout -- index.html
    

    git reset anulou a preparação da alteração, mas o ficheiro foi na mesma eliminado, pelo que é necessário utilizar checkout para recuperá-lo.

  8. Verifique se funcionou executando lso .

Reverter uma consolidação

Agora, vamos tornar as coisas mais complicadas. Suponha que você acidentalmente substituir um arquivo por outro arquivo, ou você faz uma alteração em um arquivo que acaba por ser um grande erro. Quer reverter para a versão anterior do ficheiro, mas já consolidou as alterações. Neste caso, um simples git checkout não vai fazer o truque.

Uma solução para este problema é reverter a consolidação anterior.

  1. Abra index.html com code:

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

    <h1>That was a mistake!</h1>
    
  3. Guarde e feche o ficheiro.

  4. Utilize estes comandos para consolidar as alterações e mostrar a consolidação mais recente:

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

    A -n1 bandeira aqui diz ao Git que queremos apenas a entrada de confirmação mais recente.

  5. Utilize os comandos seguintes para tentar restaurar o index.html:

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

    code index.html
    

    Que versão do index.html vê? A versão antiga ou a nova versão?

    Nesta situação, a melhor ação a realizar é reverter a alteração ao fazer outra consolidação que cancele a primeira. Esta é uma tarefa para o comando git revert.

  7. Feche o ficheiro e utilize git revert para anular as alterações consolidadas:

    git revert --no-edit HEAD
    

    O --no-edit sinalizador informa ao Git que não queremos adicionar uma mensagem de confirmação para essa ação.

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

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

    git log -n1
    
  10. Verifique a saída novamente. Deve 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. Finalmente, abra o arquivo index.html para certificar-se de que o conteúdo é a versão correta.

Reverter não é a única maneira de remediar essa situação; você pode simplesmente editar index.html e confirmar o arquivo corrigido. Essa opção é mais difícil se as mudanças que você cometeu foram extensas. Em qualquer caso, git revert é uma boa maneira de sinalizar sua intenção.