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.

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.


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.


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.


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.


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

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

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


“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


0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.