Jogar fora os compromissos locais em Git

Devido a uma má selecção de cerejas, o meu repositório Git local está actualmente cinco compromissos à frente da origem, e não num bom estado. Eu quero me livrar de todos esses commits e começar de novo.

Obviamente, apagar meu diretório de trabalho e reclonar faria isso, mas baixar tudo do GitHub novamente parece um exagero, e não é um bom uso do meu tempo.

Talvez git revert seja o que eu preciso, mas eu não'não quero acabar 10 comete antes da origem (ou mesmo seis), mesmo que o próprio código volte ao estado certo. Eu só quero fingir que a última meia hora nunca aconteceu.

Há algum comando simples que faça isso? Parece um caso de uso óbvio, mas eu'não estou encontrando nenhum exemplo disso.


Note que esta pergunta é especificamente sobre compromissos, não sobre:

  • arquivos não rastreados
  • alterações não encenadas
  • mudanças encenadas, mas não comprometidas
Solução

Se o seu excesso de compromissos só for visível para si, pode simplesmente fazer "git reset - origem dura/` para voltar para onde está a origem. Isto irá redefinir o estado do repositório para o commit anterior, e irá descartar todas as alterações locais.

Fazendo um git revert faz com que novos se comprometam a remover compromissos antigos de uma forma que mantenha a história de todos sãos.

Comentários (11)

Basta apagar a sua sucursal principal local e recriá-la assim:

git branch -D master
git checkout origin/master -b master
Comentários (8)

Tente:

git reset --hard 

para repor a sua cabeça para onde quer que queira estar. Use o gitk para ver em qual compromisso você quer estar. Você pode fazer reset dentro do gitk também.

Comentários (2)