1
resposta

Erro git rebase -i

Depois de da git log e dar o rebase -i e mudar todos menos um para squash o git bash da esse erro:

jacks@PC MINGW64 ~/OneDrive/Documentos/Alura/Git (master|REBASE)
$ git rebase --edit-todo
error: could not parse '0fd06cc'
error: invalid line 1: pick 0fd06cc Trocando ul por dl
error: cannot 'squash' without a previous commit
error: could not parse '0fd06cc'
error: invalid line 1: pick 0fd06cc Trocando ul por dl
error: cannot 'squash' without a previous commit
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.
1 resposta

Oi, Jackson! Tudo certo?

Logo de início, peço desculpas pela demora em retornar!

Com a mensagem de erro que aparece ao tentar realizar o rebase, o Git nos informa que não é possível mesclar o commit mais antigo com commits novos, mas somente o contrário. Isso aconteceu, pois o squash faz com que o commit indicado se mescle com o anterior e, como tentamos usá-lo no commit mais antigo da sequência, não há outro antes dele para que de fato a mesclagem aconteça.

Quando o VIM é aberto depois de executar o git rebase -i, os commits apresentados seguem a ordem do mais antigo para o mais recente. Desse modo, é preciso que o commit que se encontra na primeira linha seja iniciado com pick (indicando qual commit será escolhido) enquanto os demais, com squash (indicando quais commits serão mesclados com aquele selecionado com pick).

Sabendo disso, podemos, inicialmente, abortar o rebase, desta forma:

git rebase --abort

Caso não se lembre dos commits que se deseja mesclar, podemos utilizar o comando abaixo (ele nos mostrará todos os commits que já fizemos em ordem do mais recente para o mais antigo):

git log --oneline

Logo após isso, podemos executar o comando abaixo:

git rebase -i HEAD~n

Observação: onde encontra-se HEAD~n, substituir a letra “n” pela quantidade de commits em que se deseja trabalhar (quantidade decidida após visualizar o histórico de todos os commits).

Nesse momento, será aberta a tela do VIM. para alterar o conteúdo apresentado, pressione a tecla “i”. Logo em seguida, analise os commits e substitua a palavra “pick” por “s”, deixando somente o primeiro com a palavra “pick”, como no exemplo abaixo:

Início da transcrição. Recorte de captura de tela do Git bash. Tela de fundo preto com duas linhas. Na primeira linha, tem-se o texto “pick 28cea89 commit 1”. Na segunda linha, tem-se o texto “s 204c96d commit 2”. Fim da transcrição.

Para finalizar, basta pressionar a tecla ESC e digitar, tudo em minúsculo :x.

Uma nova tela do VIM será aberta. Desta vez, é apenas para apresentar a mudança feita, será preciso, portanto, apenas pressionar a tecla ESC e digitar :x, como fizemos a pouco.

Pronto! Depois de todos esses passos, conseguimos executar o rebase normalmente.

Jackson, caso queira conhecer um pouco mais sobre essa mesclagem que fizemos e sobre uso do squash, deixo como recomendação assistir um vídeo super bacana da Websérie “Git e Github para sobrevivência”:

Espero tê-lo ajudado! Caso surjam dúvidas após minha explicação ou ao longo dos seus estudos, fico à disposição para ajudá-lo.

Até mais, Jackson!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software