Git, desfazendo commits
Usando git checkout, reset, e revert na linha de comando
Republicado de https://brorlandi.github.io/git-desfazendo-commitsCheckout
O checkout é o jeito mais simples para desfazer alterações. Supondo que você editou o
arquivo.txt
e quer voltá-lo para seu estado original desde o último commit. Use:git checkout -- arquivo.txt
Pronto, alteração desfeita!
Navegando no repositório
O comando de checkout não é usado apenas para desfazer alterações, ele permite navegar por commits e branchs no repositório.
Por exemplo, podemos ver repositório no penúltimo commit:
git checkout HEAD~1
Este comando muda o HEAD que é basicamente em qual estado o repositório está. Mudando para HEAD~1 estaremos no commit anterior ao HEAD atual. A cada execução deste comando mudará o repositório para um commit atrás.
Também podemos trocar
HEAD
pormaster
e visualizar commits anteriores na branch master. Usegit checkout master
para voltar para a master no último commit.Reset
No primeiro post usamos
git add
para adicionar as alterações do repositório para o próximo commit. Mas se quisermos remover esse arquivo de lá, como fazemos? Usegit reset
!Vamos preparar um exemplo. Em um repositório Git, faça alterações e use o
git add
. Se você quer apenas tirar o arquivo dostage
(área onde as alterações vão para o próximo commit) use:git reset arquivo.txt
Pronto, o arquivo saiu do stage.
Resetando commits
O comando
git reset
, como o próprio nome diz, reseta o repositório para o estado do último commit, ou outro commit. Ou seja, com ele podemos desfazer commits.Vamos desfazer o último commit de um repositório para exemplificar. Há dois modos de usar o
get reset
aqui. Use:git reset HEAD~1
Veja que o commit foi desfeito mas as alterações nos arquivos ainda ficaram. Neste caso você pode fazer um novo commit com o conteúdo do commit desfeito.
Reset Hard
Ao usar o
git reset
a opção padrão dele é--soft
, que foi o que aconteceu no exemplo anterior. O reset soft não altera os arquivos, apenas o commit. O outro modo de desfazer o commit é o modo hard. Não é hard de ser difícil não. Neste caso as alterações nos arquivos também serão desfeitas com o commit. Para o reset hard use:git reset --hard HEAD~1
Perceba que os arquivos estão exatamente como no commit anterior.
Revert
Pode acontecer o caso de você precisar desfazer um commit que não é o commit mais recente e sim um mais antigo. Nesse caso, fazer um reset até o commit irá apagar também todos os commits na frente dele. Para resolver isso temos o
git revert
. O revert cria um novo commit que faz o reverso do commit especificado. Ou seja, se o commit adicionou um arquivo, o revert remove, se editou uma linha, volta ao que era antes. Supondo que queremos reverter o commit de ID11a5b
, usamos:git revert 11a5b
Pode haver conflitos nessa operação, pois ao reverter um commit que criou uma linha, pode causar conflito com outro commit que editou aquela linha. Neste caso o git dará um aviso e você terá que resolver os conflitos.
Continue aprendendo…
Haverá outro post sobre resolver conflitos.
Sabia que eu tenho um curso online gratuito sobre Git e GitHub na Udemy? Acesse meu curso aqui e saiba mais sobre ele.
Referências
- https://brorlandi.github.io/git-desfazendo-commits
Comentários