Como recuperar um git rebase mal feito
23/07/2009
Como acabei de “twittar”, fiz cagada bagunça em um branch ao usar o git rebase. Antes de me desesperar, resolvi fazer a velha busca no “Pai” (termo usado para identificar o Google pelo famosíssimo Guanabara em um dos guanacasts sobre SEO (parte I e parte II), onde encontrei um post de Greg DeVore, explicando como recuperar uma cagada bagunça dessa. E com meus MAD SKIILS, ainda usei o git cherry-pick para recuperar o commit perdido. Lembrando que deve haver forma mais higiênica de recuperar um commit “perdido”. Bom, chega de bla-bla-bla e vamos ao que interessa. (os hashes de commit foram abreviados para facilitar a leitura)
$ echo NÃO SE DESESPERAR NÃO SE DESESPERAR $ cat .git/logs/refs/meu-branch 937 a0e tino ...commit: meu commit 2 a0e 1eb tino ...commit(amend): meu commit 2 1eb 8db tino ...rebase (finish): refs/heads/meu-branch onto 8db $ echo NOTE QUE NO COMMIT "1eb" FOI O ÚLTIMO ANTES DO rebase NOTE QUE NO COMMIT "1eb" FOI O ÚLTIMO ANTES DO rebase $ git cherry-pick -n 1eb Finished one cherry-pick. $ git status ... modified app/controller/application_controller.rb ... $ git commit -m 'meu commit 2' [meu-branch 3f5f542] meu commit 2 15 files changed, 157 insertions(+), 21 deletions(-)
Pronto, seu trabalho foi recuperado!
Categoriasgit, tutorial
cherry-pick, git, rebase







Cherry pick é interessante. Uma outra dica, nesse caso se quizesse só ‘voltar’ o branch para o mesmo estado que estava antes do rebase voce poderia fazer:
git rebase –hard leb
Cheers
Olá Tino, parabens pelo blog e obrigado pela visita ao meu.
Posso linkar seu blog no meu?
Um abraço
José Carlos Maciel
http://www.jcmaciel.com
@maciel, obrigado e claro que pode! Abraço!
@kochenburger como eu queria voltar o último commit, e nenhuma alteração ocorreu depois da baguná, poderia sim, bem lembrado!
Já está “linkado”.
Abraços!
Uma outra sugestão seria usar o comando ‘git reflog’, dar um checkout no commit que vc deseja, e criar um novo branch, se for o caso.
Abs