O Git é uma ferramenta eficaz que acompanha seu código. E uma das ótimas características da ferramenta é que você pode verificar facilmente seu histórico e reverter se tiver cometido um erro. Vamos criar uma situação em que você possa reverter a última confirmação e ver como o comando Git revert funciona.
Vamos começar adicionando alguns arquivos. No último compromisso, vamos adicionar e excluir arquivos para criar uma situação confusa. Então vamos voltar ao estado antes do caos.
Você pode criar uma pasta chamada /teste e executar os seguintes comandos para inicializar o Git e criar a situação descrita acima (estamos fazendo comprometes separados intencionalmente para criar um histórico):
$ git init
Repositório Git vazio inicializado em/usuários/zakh_eecs/_work/learngit/git_revert/test/.git/
$ echo x> file_1.TXT
$ git add -a
$ git Commit -m "Adicionando file_1.TXT"
[Master (raiz-compromisso) 08CAF5D] Adicionando file_1.TXT
1 arquivo alterado, 1 inserção (+)
Criar modo 100644 file_1.TXT
$ echo y> file_2.TXT
$ git add -a
$ git Commit -m "Adicionando file_2.TXT"
[Mestre BA18A2F] Adicionando file_2.TXT
1 arquivo alterado, 1 inserção (+)
Criar modo 100644 file_2.TXT
$ echo z> file_3.TXT
$ git add -a
$ git Commit -m "Adicionando file_3.TXT"
[Mestre 97F09AD] Adicionando file_3.TXT
1 arquivo alterado, 1 inserção (+)
Criar modo 100644 file_3.TXT
$ echo u> file_4.TXT
$ git add -a
$ git Commit -m "Adicionando file_4.TXT"
[Master 9CAF084] Adicionando file_4.TXT
1 arquivo alterado, 1 inserção (+)
Criar modo 100644 file_4.TXT
$ echo v> file_5.TXT
$ git add -a
$ git Commit -m "Adicionando file_5.TXT"
[Master 3F228B2] Adicionando file_5.TXT
1 arquivo alterado, 1 inserção (+)
Criar modo 100644 file_5.TXT
Se verificarmos nossa pasta, devemos ver a seguinte situação:
$ LS -1
file_1.TXT
file_2.TXT
file_3.TXT
file_4.TXT
File_5.TXT
Se verificarmos o histórico, devemos ter os seguintes arquivos:
$ git log --oneeline
3F228B2 Adicionando file_5.TXT
9CAF084 Adicionando file_4.TXT
97F09AD ADICIONAL FILE_3.TXT
BA18A2F Adicionando file_2.TXT
08CAF5D Adicionando file_1.TXT
Agora vamos criar alguns estragos, vamos excluir alguns arquivos e adicionar um arquivo ruim.
$ rm file_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 em consequências"
[Master 879fbf8] Adicionado e excluído arquivos sem pensar em consequências
3 arquivos alterados, 1 inserção (+), 2 deleções (-)
Excluir modo 100644 file_2.TXT
Excluir modo 100644 file_4.TXT
Criar modo 100644 my_bad_file.TXT
Agora, esta é a condição de nossa pasta:
$ LS -1
file_1.TXT
file_3.TXT
File_5.TXT
my_bad_file.TXT
E esta é a condição da nossa história:
$ git log --oneeline
879fbf8 Adicionado e excluído arquivos sem pensar em consequências
3F228B2 Adicionando file_5.TXT
9CAF084 Adicionando file_4.TXT
97F09AD ADICIONAL FILE_3.TXT
BA18A2F Adicionando file_2.TXT
08CAF5D Adicionando file_1.TXT
Percebemos que não queremos o último commit 879fbf8. Por isso, usamos o comando revert: revert:
$ git reverter 879fbf8
Ele abrirá uma janela de texto para editar o comentário automático:
Reverter "Arquivos adicionados e excluídos sem pensar em consequências"
Este comprometimento revertido 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Por favor, insira a mensagem de confirmação para suas alterações. Linhas começando
# com '#' será ignorado, e uma mensagem vazia aborta a confirmação.
# No mestre do ramo
# Muda a ser comprometido:
# Novo arquivo: file_2.TXT
# Novo arquivo: file_4.TXT
# excluído: my_bad_file.TXT
#
Você pode modificar o comentário. Nós vamos mantê -lo como é. Assim que você salvar a janela de comentários, a tarefa de reverter ocorrerá:
$ git reverter 879fbf8
[Master 6E80F0E] reverta "Arquivos adicionados e excluídos sem pensar em consequências"
3 arquivos alterados, 2 inserções (+), 1 exclusão (-)
Criar modo 100644 file_2.TXT
Criar modo 100644 file_4.TXT
Excluir modo 100644 my_bad_file.TXT
Vejamos nossa pasta agora:
$ LS -1
file_1.TXT
file_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 deleções foram revertidas. Vamos verificar o log:
$ git log --oneeline
6E80F0E reverte "Arquivos adicionados e excluídos sem pensar em consequências"
879fbf8 Adicionado e excluído arquivos sem pensar em consequências
3F228B2 Adicionando file_5.TXT
9CAF084 Adicionando file_4.TXT
97F09AD ADICIONAL FILE_3.TXT
BA18A2F Adicionando file_2.TXT
08CAF5D Adicionando file_1.TXT
Há um novo compromisso 6E80F0E. Quaisquer alterações que fizessem parte de 879fbf8 foi desfeito e depois comprometido em 6E80F0E.
Aviso: O comando de redefinição do Git permite que você desfaça comissões também. Mas no caso de redefinição (especialmente réfil dura), ele teria excluído o 879fbf8 comprometer como se nunca tivesse acontecido e não haveria 6E80F0E comprometer-se. Com um comando revert, todos podem ver as mudanças que ocorreram. No caso de redefinição, nenhum traço é deixado. Portanto, é uma má idéia usar o comando Redefinir em um repositório público, pois pode causar confusão em massa. A regra de ouro é - não use redefinir em repositórios públicos, use a revert que é mais segura.
Para concluir:
O comando git revert é uma maneira rápida e conveniente de remediar seus erros. É um comando que você deve se lembrar se você trabalha regularmente com o git.
Um estudo mais aprofundado:
- https: // git-scm.com/docs/git-reverter
- https: // git-scm.com/docs/git-reset
- Git: Aprenda Controle de Versão com Git: Um Guia de Iniciantes de Ultimate Passo a Passo
- Controle de versão com Git: ferramentas e técnicas poderosas para desenvolvimento de software colaborativo
- Pro Git, 2ª edição