Marcio Trindade

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:

console
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:

console
git rebase --onto 0f94f0b5e8cc8f0ca0d95545b3953b7515a1939c 4a9da34153312eb3b95facae576594199d967e3e

ou

console
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.

console
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.