Vamos começar adicionando alguns arquivos. No último commit, vamos adicionar e deletar arquivos para criar uma situação complicada. Então, vamos voltar ao estado anterior ao caos.
Você pode criar uma pasta chamada / test e executar os seguintes comandos para inicializar o Git e criar a situação descrita acima (estamos fazendo commits separados intencionalmente para criar um histórico):
$ git initRepositório Git vazio inicializado em / Users / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> arquivo_1.TXT
$ git add -A
$ git commit -m "Adicionando arquivo_1.TXT"
[master (root-commit) 08caf5d] Adicionando arquivo_1.TXT
1 arquivo alterado, 1 inserção (+)
modo de criação 100644 arquivo_1.TXT
$ echo y> arquivo_2.TXT
$ git add -A
$ git commit -m "Adicionando arquivo_2.TXT"
[master ba18a2f] Adicionando arquivo_2.TXT
1 arquivo alterado, 1 inserção (+)
modo de criação 100644 arquivo_2.TXT
$ echo z> file_3.TXT
$ git add -A
$ git commit -m "Adicionando file_3.TXT"
[master 97f09ad] Adicionando file_3.TXT
1 arquivo alterado, 1 inserção (+)
modo de criação 100644 arquivo_3.TXT
$ echo u> file_4.TXT
$ git add -A
$ git commit -m "Adicionando file_4.TXT"
[master 9caf084] Adicionando arquivo_4.TXT
1 arquivo alterado, 1 inserção (+)
modo de criação 100644 arquivo_4.TXT
$ echo v> file_5.TXT
$ git add -A
$ git commit -m "Adicionando file_5.TXT"
[master 3f228b2] Adicionando arquivo_5.TXT
1 arquivo alterado, 1 inserção (+)
modo de criação 100644 arquivo_5.TXT
Se verificarmos nossa pasta, devemos ver a seguinte situação:
$ ls -1arquivo_1.TXT
arquivo_2.TXT
file_3.TXT
file_4.TXT
file_5.TXT
Se verificarmos o histórico, devemos ter os seguintes arquivos:
$ git log --oneline3f228b2 Adicionando arquivo_5.TXT
9caf084 Adicionando arquivo_4.TXT
97f09ad Adicionando arquivo_3.TXT
ba18a2f Adicionando arquivo_2.TXT
08caf5d Adicionando arquivo_1.TXT
Agora vamos criar um pouco de confusão, vamos deletar alguns arquivos e adicionar um arquivo ruim.
$ rm arquivo_2.TXT$ rm file_4.TXT
$ echo w> my_bad_file.TXT
$ git add -A
$ git commit -m "Arquivos adicionados e excluídos sem pensar nas consequências"
[master 879fbf8] Arquivos adicionados e excluídos sem pensar nas consequências
3 arquivos alterados, 1 inserção (+), 2 exclusões (-)
modo de exclusão 100644 arquivo_2.TXT
modo de exclusão 100644 arquivo_4.TXT
modo de criação 100644 my_bad_file.TXT
Agora, esta é a condição de nossa pasta:
$ ls -1arquivo_1.TXT
file_3.TXT
file_5.TXT
my_bad_file.TXT
E esta é a condição da nossa história:
$ git log --oneline879fbf8 Adicionados e excluídos arquivos sem pensar nas consequências
3f228b2 Adicionando arquivo_5.TXT
9caf084 Adicionando arquivo_4.TXT
97f09ad Adicionando arquivo_3.TXT
ba18a2f Adicionando arquivo_2.TXT
08caf5d Adicionando arquivo_1.TXT
Percebemos que não queremos o último commit 879fbf8. Portanto, usamos o seguinte comando revert:
$ git revert 879fbf8Isso abrirá uma janela de texto para editar o comentário automático:
Reverter "Arquivos adicionados e excluídos sem pensar nas consequências"Isso reverte o commit 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Por favor, insira a mensagem de confirmação para suas alterações. Linhas começando
# com '#' será ignorado, e uma mensagem vazia aborta o commit.
# No branch master
# Mudanças a serem confirmadas:
# Novo arquivo: arquivo_2.TXT
# Novo arquivo: file_4.TXT
# Excluído: my_bad_file.TXT
#
Você pode modificar o comentário. Vamos mantê-lo como está. Assim que você salvar a janela de comentário, a tarefa de reversão ocorrerá:
$ git revert 879fbf8[master 6e80f0e] Reverter "Arquivos adicionados e excluídos sem pensar nas consequências"
3 arquivos alterados, 2 inserções (+), 1 exclusão (-)
modo de criação 100644 arquivo_2.TXT
modo de criação 100644 arquivo_4.TXT
modo de exclusão 100644 my_bad_file.TXT
Vamos dar uma olhada em nossa pasta agora:
$ ls -1arquivo_1.TXT
arquivo_2.TXT
file_3.TXT
file_4.TXT
file_5.TXT
Nossos arquivos estão de volta em sequência como antes. Todas as adições e exclusões foram revertidas. Vamos verificar o log:
$ git log --oneline6e80f0e Reverter "Arquivos adicionados e excluídos sem pensar nas consequências"
879fbf8 Adicionados e excluídos arquivos sem pensar nas consequências
3f228b2 Adicionando arquivo_5.TXT
9caf084 Adicionando arquivo_4.TXT
97f09ad Adicionando arquivo_3.TXT
ba18a2f Adicionando arquivo_2.TXT
08caf5d Adicionando arquivo_1.TXT
Há um novo commit 6e80f0e. Quaisquer mudanças que fizeram parte de 879fbf8 foi desfeito e então comprometido em 6e80f0e.
Aviso: O comando de reset do Git permite desfazer commits também. Mas no caso de reinicialização (especialmente a reinicialização a frio), ele teria excluído o 879fbf8 cometer como se nunca tivesse acontecido e não teria havido 6e80f0e comprometer-se. Com um comando de reversão, todos podem ver as mudanças que ocorreram. No caso de reinicialização, nenhum traço é deixado. Portanto, é uma má ideia usar o comando reset em um repositório público porque pode causar confusão em massa. A regra de ouro é - não use redefinir em repositórios públicos, use reverter, que é mais seguro.
Em conclusão:
O comando de reversão do Git é uma maneira rápida e conveniente de corrigir seus erros. É um comando que você deve lembrar se trabalha regularmente com Git.
Um estudo mais aprofundado:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: Aprenda o controle de versão com Git: um guia completo para iniciantes passo a passo
- Controle de versão com Git: ferramentas e técnicas poderosas para desenvolvimento de software colaborativo
- Pro Git, 2ª edição