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.txte quer voltá-lo para seu estado original desde o último commit. Use:git checkout -- arquivo.txtPronto, 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~1Este 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
HEADpormastere visualizar commits anteriores na branch master. Usegit checkout masterpara voltar para a master no último commit.Reset
No primeiro post usamos
git addpara 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.txtPronto, 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 resetaqui. Use:git reset HEAD~1Veja 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 reseta 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~1Perceba 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 11a5bPode 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