Exercício - Use o Git para corrigir erros
Agora, vamos começar alguns práticos corrigindo nossos erros!
Praticar a recuperação de um ficheiro eliminado
Primeiro, tente excluir index.html:
rm index.html
Pode parecer uma má ideia, mas lembre-se: o Git tem as suas costas!
Utilize um comando
ls
para verificar se o index.html foi eliminado:ls
Deverá ver o seguinte resultado. Note que agora, não há nenhum arquivo index.html !
CSS
Vamos recuperá index.html. Use
git checkout
para trazer de volta index.html:git checkout -- index.html
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
Para ver o que acontece, tente este comando:
git rm index.html
Novamente, procure index.html correndo
ls
. Você não deve ver index.html.Tente recuperá index.html da mesma forma que fez da última vez:
git checkout -- index.html
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.
Anule a preparação da eliminação do ficheiro index.html com o comando
git reset
:git reset HEAD index.html
Verifique esta saída, que a confirma:
Unstaged changes after reset: D index.html
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 utilizarcheckout
para recuperá-lo.Verifique se funcionou executando
ls
o .
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.
Abra index.html com
code
:code index.html
Substitua o conteúdo do index.html por este código:
<h1>That was a mistake!</h1>
Guarde e feche o ficheiro.
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.Utilize os comandos seguintes para tentar restaurar o index.html:
git checkout -- index.html
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
.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.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(-)
Acompanhe com um comando
git log
para mostrar a consolidação mais recente:git log -n1
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.
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.