rebase em andamento. Não é possível confirmar. Como prosseguir ou parar (abortar)?

139

Quando eu corro:

git status

Eu vejo isso:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

Quando eu faço:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

Entendo: rebase-apply

Não posso me comprometer com a origem.

git branch

Shows:

* (no branch, rebasing master)
  develop
  master

Estou preso. Não sei o que fazer? Realmente leva tanto tempo para se recuperar? git rebase --continuenão faz nada. Eu não tenho nada no status git .. Estou apenas aguardando o rebase. O que eu posso fazer?

UDATE: Esta é a saída de: git rebase --continue

Applying: no message
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

git add. não tem nada.

Joseph Chambers
fonte

Respostas:

255

A rebase não ocorre em segundo plano. "rebase em andamento" significa que você iniciou uma rebase e a rebase foi interrompida devido a um conflito. Você precisa retomar a rebase ( git rebase --continue) ou abortá-la ( git rebase --abort).

Como git rebase --continuesugere a mensagem de erro de , você pediu ao git para aplicar um patch que resulta em um patch vazio. Provavelmente, isso significa que o patch já foi aplicado e você deseja descartá-lo usando git rebase --skip.

Matthieu Moy
fonte
Atualizei a postagem para incluir git rebase --continue por sua solicitação.
Joseph Chambers
2
OK, então "ele rebase - continuar não faz nada" era impreciso. Você deve ter escrito "git rebase - continue os erros da seguinte forma ..." para obter ajuda.
Matthieu Moy
3
A documentação sobre isso muito mal, continua repetindo que você 'git rebase --continue' e você terminará de uma maneira infinita de dizer isso.
19416 Jean-Paul
6
git rebase --skip fez isso!
Borzh
Como esta é uma pergunta para iniciantes relativos (como eu), pensei que vale a pena mencionar toda essa conversa sobre executar isso ou aquilo - requer a abertura de um novo terminal e o retorno ao repositório ... nada funcionaria no meu caso desta questão sem fazendo isso,
Kdean571
10

Fiquei preso no 'status rebase', fiquei

On branch master
Your branch is up to date with 'origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

mas correr git rebase --skipcedeu error: could not read '.git/rebase-apply/head-name': No such file or directory.

Correr rm -fr ".git/rebase-apply"ajudou.

Nota: é claro, faça isso apenas se você não se importa com a rebase ou se você está preso em uma rebase anterior que não deseja mais.

olhos selvagens
fonte
8
  • Etapa 1: continue git rebase --continue

  • Etapa 2: corrigir CONFLITOS e git add .

  • Volte para a etapa 1, agora, se estiver escrito no changes .., execute git rebase --skipe volte para a etapa 1

  • Se você apenas deseja sair do rebase, execute git rebase --abort

  • Depois que todas as alterações estiverem concluídas, execute git commit -m "rebase complete"e pronto.

Ani Menon
fonte
6

Você disse ao seu repositório para reorganizar. Parece que você estava em um commit (identificado pelo SHA 9c168a5) e, em seguida, fez git rebase masteror git pull --rebase master.

Você está refazendo o mestre de ramificação nesse commit. Você pode finalizar o rebase via git rebase --abort. Isso colocaria de volta ao estado em que você estava antes de começar a rebasear.

Schleis
fonte
Eu nunca faço um git rebase/pull --rebase master. Eu frequentemente acabo nesse estado ... por causa de um conflito. I alterar um arquivo, faça um puxão, restaurar as minhas alterações e o novo patch está vazio que dói cérebro de git que então decide entrar neste "modo de rebase" ...
Alexis Wilke
6

Eu entrei neste estado recentemente. Depois de resolver conflitos durante uma nova reformulação, confirmei minhas alterações, em vez de executar git rebase --continue. Isso produz as mesmas mensagens que você viu quando executou seus comandos git statuse git rebase --continue. Resolvi o problema executando git rebase --aborte, em seguida, executando novamente o rebase. Provavelmente, também é possível pular a reformulação, mas eu não tinha certeza em que estado isso me deixaria.

$ git rebase --continue
Applying: <commit message>
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

$ git status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean
jsears
fonte
Além de --abort(+1), agora você tem --quit( stackoverflow.com/a/41363262/6309 )
VonC
Depois de consertar os conflitos. então chame git commit. faça outro trabalho e chame git commit novamente. Se você usar este método git rebase --abort, todo o trabalho que você estiver fazendo após o conflito de confirmação será desejado. Portanto, tenha cuidado
Jin
3

Se git rebase --abortnão funcionar e você ainda conseguir

erro: não foi possível ler '.git / rebase-apply / head-name': esse arquivo ou diretório não existe

Tipo:

git rebase --quit
Panda-313
fonte
0

Eu configurei meu gitpara autorebase em umgit checkout

# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

Caso contrário, ele será mesclado automaticamente quando você alterna entre ramificações, o que eu acho que é a pior escolha possível como padrão.

No entanto, isso tem um efeito colateral, quando alterno para um ramo e, então, git cherry-pick <commit-id>acabo nesse estado estranho toda vez que há um conflito.

Na verdade, tenho que abortar o arquivo rebase, mas primeiro eu corrijo o conflito, git add /path/to/fileo arquivo (outra maneira muito estranha de resolver o conflito nesse caso ?!), depois execute um git commit -i /path/to/file. Agora eu posso abortar o rebase:

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git push --force origin <other-branch>

O segundo git commit .parece vir do aborto. Vou corrigir minha resposta se descobrir que devo abortar o quanto rebaseantes.

A --forcesobre o impulso é necessário se você ignorar outros commits e ambos os ramos não são suavizar (ambos estão faltando commits do outro).

Alexis Wilke
fonte
“Caso contrário, ele será mesclado automaticamente quando você alternar entre ramificações” - Hum, não. O Git não faz nenhum tipo de mesclagem ou rebase quando você alterna ramificações. autosetupmergetem a ver com a forma como git pullestá configurado para novos ramos.
Marnen Laibow-Koser
Nessa época, quando eu estava lutando com esse problema, com certeza fazia algum tipo de fusão de vários códigos. Minha configuração atual parece ignorar esse problema. Também existe o problema de não ter feito um commit + push de sua ramificação atual antes de tentar alternar.
Alexis Wilke
O Git dirá se suas alterações não confirmadas impediriam a troca de ramificações, portanto não há muito com o que se preocupar, existe? Ou você está falando de outra coisa?
Marnen Laibow-Koser
0

Outra opção para ABORTAR / PULAR / CONTINUAR no IDE

VCS> Git> Interromper rebasing

insira a descrição da imagem aqui

Prabs
fonte
0

O meu foi um erro que apareceu no BitBucket. Ran git am --skipconsertou.

Kevin Aung
fonte