Eu cometi os arquivos errados acidentalmente para Git, mas ainda não empurrei o commit para o servidor.
Como posso desfazer esses commits do repositório local?
$ git commit -m "Something terribly misguided" # (1)
$ git reset HEAD~ # (2)
<< edit files as necessary >> # (3)
$ git add ... # (4)
$ git commit -c ORIG_HEAD # (5)
git status
, por isso vais precisar de as adicionar novamente antes de fazeres a submissão). Se você somente quiser adicionar mais alterações à submissão anterior, ou alterar a mensagem de submissão1, você poderia usar git reset --soft HEAD~
, que é como git reset HEAD~
2, mas deixa as suas alterações existentes encenadas.git add
qualquer coisa que você queira incluir no seu novo commit.reset
copiou a cabeça antiga para .git/ORIG_HEAD
; commit
com -c ORIG_HEAD
irá abrir um editor, que inicialmente contém a mensagem de log da antiga submissão e permite que você a edite. Se não precisas de editar a mensagem, podes utilizar a opção `-C'.Cuidado, no entanto, se você adicionou qualquer nova alteração ao índice, utilizando `commit --amend' irá adicioná-las ao seu commit anterior.
Se o código já estiver empurrado para o seu servidor e você tiver permissões para sobregravar o histórico (rebase), então:
git push origin master --force
Você também pode olhar para esta resposta:
A resposta acima mostrará git reflog
que é utilizado para descobrir o que é o SHA-1 ao qual você deseja reverter. Uma vez que você encontrou o ponto para o qual deseja desfazer para utilizar a sequência de comandos como explicado acima.
1 Note, no entanto, que você não precisa reiniciar para um commit anterior se você acabou de cometer um erro na sua mensagem de commit. A opção mais fácil é git reset
(para fazer o reset de qualquer alteração desde então) e depois git commit --amend
, que irá abrir o seu editor de mensagens de commit pré-preenchido com a última mensagem de commit.
2 HEAD~
é o mesmo que HEAD~1
.
Adicione/remova arquivos para obter as coisas do jeito que você quer:
git rm classdir
git add sourcedir
Então, emenda o compromisso:
git commit --amend
O compromisso anterior, errôneo, será editado para refletir o novo estado do índice - em outras palavras, será como se você nunca tivesse cometido o erro em primeiro lugar.
Note que você só deve fazer isso se ainda não tiver empurrado. Se você empurrou, então você só terá que cometer uma correção normalmente.
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"
ou
git reset --hard HEAD~1
Aviso: O comando acima removerá permanentemente as modificações nos arquivos `.java' (e quaisquer outros arquivos) que você quisesse submeter.
O "reset duro" para "HEAD-1" irá definir a sua cópia de trabalho para o estado do commit antes do seu commit errado.