Remover commits antigos
Você por algum descuido acabou adicionando o que não devia no seu repositório e quando percebeu já haviam outras alterações depois da sua. Então vem a dúvida e agora como faço pra retirar um commit antigo e manter as demais alterações feitas.
Aprendi uma forma de fazer isso utilizando o git rebase --onto <rev> <rev> e achei melhor compartilhar com todos.
Vamos a um exemplo prático, observe o log abaixo:
commit 4bbdc8d61dd9efdf86d368b16a8d66d0b7701d42 Author: Marcio Trindade Date: Tue Jul 14 00:32:07 2009 -0300 fixed feed commit 4a9da34153312eb3b95facae576594199d967e3e Author: Marcio Trindade Date: Mon Jul 13 10:21:16 2009 -0300 add RedCloth commit 0f94f0b5e8cc8f0ca0d95545b3953b7515a1939c Author: Marcio Trindade Date: Mon Jul 13 00:12:40 2009 -0300 remove redirect to .htaccess
Na segunda revisão que é mostrada acima eu adicionei, por descuido, a gem RedCloth no repositório, porém eu já tenho outros commits depois deste o que me impede de usar um git reset --hard HEAD~1 então a solução foi:
git rebase --onto 0f94f0b5e8cc8f0ca0d95545b3953b7515a1939c 4a9da34153312eb3b95facae576594199d967e3e
ou
git rebase --onto HEAD~2 HEAD~1
com este comando um novo repositório foi criado, porém sem o intervalo entre as duas versões que passei como parâmetro, ficando o resultado assim.
commit 4bbdc8d61dd9efdf86d368b16a8d66d0b7701d42 Author: Marcio Trindade Date: Tue Jul 14 00:32:07 2009 -0300 fixed feed commit 0f94f0b5e8cc8f0ca0d95545b3953b7515a1939c Author: Marcio Trindade Date: Mon Jul 13 00:12:40 2009 -0300 remove redirect to .htaccess
Para mais informações leia o manual oficial
Qualquer dúvida ou sugestão mande seu comentário.