Esqueci “git rebase --continue” e fiz “git commit”. Como consertar?

112

Eu estava redefinindo o código no git, encontrei alguns conflitos de mesclagem. Resolvi os conflitos e fiz:

git add

Nesse ponto, esqueci de fazer:

git rebase --continue

Continuei codificando e fiz:

git commit

para as mudanças. Agora estou ligado "no branch"e não posso fazer:

git rebase --continue 

Como faço para corrigir isso?

Abhilash
fonte
# Atualmente não está em nenhum ramo. nada para confirmar (diretório de trabalho limpo)
Abhilash

Respostas:

4

EDIT : Observe a resposta abaixo também para ver se essa é uma solução mais fácil para você. https://stackoverflow.com/a/12163247/493106


Eu teria que experimentar, mas acho que é o que eu faria:

  1. Marque seu último commit (ou apenas anote seu SHA1 em algum lugar para não perdê-lo): git tag temp
  2. git rebase --abort
  3. Faça o rebase novamente. Você terá que resolver a fusão novamente. :(
  4. git rebase --continue
  5. git cherry-pick temp

O problema com isso é que seu tempcommit provavelmente contém a resolução da fusão e o novo código. Portanto, pode ser complicado, mas eu tentaria e veria se funciona.

MatrixFrog
fonte
Você pode marcar como @MatrixFrog diz ou pode salvá-lo como um patch também. Em seguida, faça o aborto do rebase. Verifique o status para garantir que o repo esteja em um estado que você sabe que não teve problemas e, em seguida, inicie a busca e o rebase.
yasouser
18
Não faça isso. Veja a resposta de kirikaza abaixo para uma maneira muito mais simples / limpa. Não mexa com a escolha seletiva e resolvendo conflitos uma segunda vez.
tandrewnichols
4
@Abhilash Por favor, aceite a resposta de kirikaza. Eu (assim como tandrewnichols) fiz isso e havia uma maneira muito mais fácil (e a internet parece concordar, pois essa resposta tem 4x os votos positivos).
David Doria
Agora é 10x o upvotes ... também, use git rerere para lembrar suas resoluções de conflito (útil, a menos que você às vezes faça resoluções ruins que você não quer que ele lembre).
Ajax de
217

Apenas faça git reset --soft HEAD^. Ele move o ponteiro HEAD para seu pai, mas mantém a árvore de trabalho e adiciona a alteração de mesclagem ao índice. Portanto, você pode continuar a rebase com git rebase --continuecomo antes.

Kirikaza
fonte
1
Isso funcionou totalmente e também foi a primeira vez que encontrei um uso para --soft. É bom saber como funciona, obrigado!
mmocny
1
Espero que as pessoas vejam todos os votos para cima nesta resposta e sigam o que é sugerido aqui!
Raghu
1
Isso é exatamente o que eu pensei (mas pode ter passado difícil por acidente). Não tinha certeza se HEAD estava sendo atualizado durante um rebase. Obrigado por confirmar! Fico feliz que rolei um pouco mais longe antes de mexer com a dor de cabeça acima.
DeezCashews
Editei a resposta aceita para colocar um link aqui - não vi essa resposta até seguir as instruções acima.
xaxxon
0

Eu tive o mesmo problema, e para piorar, eu estava rebasando três commits, e depois de resolver conflitos no segundo commit, eu "fiz commit" ao invés de "rebase --continue".

Como resultado, tive este reflog git

Quando apliquei a solução de kirikaza, acabei de reverter o terceiro commit, e não o segundo, o que era problemático.

Como você pode ver, o rebase começa por um checkout do remotes / origin / master branch e então aplica meus três commits que aparecem como as três operações anteriores (antes do checkout) no reflog.

Então, se você deseja reiniciar de uma base limpa, antes do rebase, você pode simplesmente redefinir totalmente para o hash antes do check-out da operação de rebase. No meu caso (veja a foto):

git reset --hard 859ed3c

Então você pode começar um novo git rebase.

Louis Durand
fonte
0

Eu tinha git rebased, consertado conflitos, git adicionado arquivo com conflitos e (por engano) commitado.

Eu tentei o git reset --soft HEAD^e git reset --hardsoluções de dados, mas não funcionou para mim.

No entanto, simplesmente git rebase --abortfuncionou: ele me levou de volta para antes do início do rebase com uma árvore de trabalho limpa.

remanescente
fonte