Exercício – Usar o Git para corrigir erros
Agora, vamos fazer exercícios práticos de correção de erros.
Praticar a recuperação de um arquivo excluído
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ê.
Use um comando
ls
para verificar se index.html foi excluído:ls
A saída a seguir será exibida. Observe que agora não há nenhum arquivo index.html.
CSS
Vamos recuperar index.html. Use
git checkout
para trazer index.html de volta:git checkout -- index.html
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
.
Para ver o que acontece, experimente este comando:
git rm index.html
Novamente, procure index.html executando
ls
. Você não verá index.html.Tente recuperar index.html como da última vez:
git checkout -- index.html
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.
Remova o preparo da exclusão de index.html com o comando
git reset
:git reset HEAD index.html
Verifique esta saída, que o confirma:
Unstaged changes after reset: D index.html
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 usarcheckout
para recuperá-lo.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.
Abra index.html com
code
:code index.html
Substitua o conteúdo de index.html por este código:
<h1>That was a mistake!</h1>
Salve e feche o arquivo.
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.Use os seguintes comandos para tentar restaurar index.html:
git checkout -- index.html
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
.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.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(-)
Acompanhe isso com um comando
git log
para mostrar o commit mais recente:git log -n1
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.
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.