rebase in corso. Impossibile eseguire il commit. Come procedere o interrompere (interrompere)?


139

Quando corro:

git status

Lo vedo:

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 io faccio:

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

Vedo: rebase-apply

Non posso impegnarmi per l'origine.

git branch

Spettacoli:

* (no branch, rebasing master)
  develop
  master

Sono bloccato. Io non so cosa fare? Ci vuole davvero tanto tempo per riformulare? git rebase --continuenon fa niente. Non ho nulla nello stato git .. Sto solo aspettando il rebase. Cosa posso fare?

UDATE: questo è l'output di: git rebase --continuue

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. Non ha nulla.

Risposte:


255

Il rebase non avviene in background. "rebase in progress" significa che hai avviato un rebase e il rebase è stato interrotto a causa di un conflitto. Devi riprendere il rebase ( git rebase --continue) o interromperlo ( git rebase --abort).

Come git rebase --continuesuggerisce il messaggio di errore da , hai chiesto a git di applicare una patch che risulta in una patch vuota. Molto probabilmente, questo significa che la patch era già stata applicata e si desidera rilasciarla utilizzando git rebase --skip.


Ho aggiornato il post per includere git rebase --continua secondo la tua richiesta.
Joseph Chambers,

2
OK, allora "rebase --continue non fa nulla" era impreciso. Dovresti aver scritto "git rebase --continua errori come segue ..." per ottenere aiuto.
Matthieu Moy,

3
La documentazione di questo molto male continua a ripetere che 'git rebase --continua' e finirai in un modo infinito per dirlo.
Jean-Paul,

6
git rebase --skip l'ha fatto!
Borzh,

Dato che questa è una domanda per i principianti relativi (come me), ho pensato che valesse la pena menzionare tutto questo discorso di eseguire questo o quello - richiede l'apertura di un nuovo terminale e il ritorno al repository ... nulla sarebbe successo nel mio caso di questo problema senza facendo ciò,
Kdean571,

10

Mi sono bloccato in "stato rebase", ho ottenuto

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

ma la corsa ha git rebase --skipceduto error: could not read '.git/rebase-apply/head-name': No such file or directory.

La corsa ha rm -fr ".git/rebase-apply"aiutato.

Nota: ovviamente, fallo solo se non ti interessa il rebase o se sei bloccato su un rebase precedente che non desideri più.


8
  • Passaggio 1: continua git rebase --continue

  • Passaggio 2: correggere i CONFLITTI quindi git add .

  • Torna al passaggio 1, ora se dice no changes ..quindi esegui git rebase --skipquindi torna al passaggio 1

  • Se vuoi solo uscire da rebase, esegui git rebase --abort

  • Una volta eseguite tutte le modifiche, eseguire git commit -m "rebase complete".


6

Hai detto al tuo repository di riformulare. Sembra che tu fossi su un commit (identificato da SHA 9c168a5) e poi lo hai fatto git rebase mastero git pull --rebase master.

Stai riassegnando il master della filiale a quel commit. È possibile terminare il rebase tramite git rebase --abort. Ciò riporterebbe allo stato in cui ti trovavi prima di iniziare a riformare.


Non faccio mai a git rebase/pull --rebase master. Finisco spesso in questo stato ... a causa di un conflitto. Cambio un file, faccio un pull, ripristino le mie modifiche e la nuova patch è vuota, il che fa male al cervello di Git che decide quindi di entrare in questa "modalità rebase" ...
Alexis Wilke,

6

Sono entrato in questo stato di recente. Dopo aver risolto i conflitti durante un rebase, ho commesso le mie modifiche, piuttosto che correre git rebase --continue. Questo produce gli stessi messaggi che avete visto quando è stato eseguito il tuo git statuse git rebase --continuecomandi. Ho risolto il problema eseguendo git rebase --aborte quindi rieseguendo il rebase. Probabilmente si potrebbe anche saltare il rebase, ma non ero sicuro in quale stato mi avrebbe lasciato.

$ 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

In aggiunta di --abort(1), ora avete --quit( stackoverflow.com/a/41363262/6309 )
VonC

Dopo aver risolto i conflitti. quindi chiama git commit. fare qualche altro lavoro, quindi chiamare di nuovo git commit. Se usi questo metodo git rebase --abort, tutto il lavoro che stai facendo dopo aver commesso un conflitto verrà annullato. Quindi fai attenzione
Jin,

3

Se non git rebase --abortfunziona e ottieni ancora

errore: impossibile leggere '.git / rebase-apply / head-name': nessun file o directory

Genere:

git rebase --quit

0

Ho impostato il mio gita autorebase su unagit checkout

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

Altrimenti, si fonde automaticamente quando si passa tra i rami, che penso sia la scelta peggiore possibile come impostazione predefinita.

Tuttavia, questo ha un effetto collaterale, quando git cherry-pick <commit-id>passo a un ramo e poi finisco in questo strano stato ogni volta che ha un conflitto.

In realtà devo interrompere il rebase, ma prima risolvo il conflitto, git add /path/to/fileil file (un altro modo molto strano per risolvere il conflitto in questo caso ?!), quindi fare un git commit -i /path/to/file. Ora posso interrompere 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>

Il secondo git commit .sembra provenire dall'interruzione. Risolverò la mia risposta se scoprissi che dovrei interrompere rebaseprima.

Il --forcepush on è richiesto se salti altri commit ed entrambi i rami non sono fluidi (entrambi mancano commit dall'altro).


"Altrimenti, si fonde automaticamente quando si passa tra i rami" - Uhm, no. Git non fa alcun tipo di unione o rebase quando si cambia ramo. autosetupmergeha a che fare con come git pullè configurato per i nuovi rami.
Marnen Laibow-Koser,

In questo momento in cui stavo combattendo con quel problema, ha sicuramente fatto una sorta di fusione di vari codici. La mia configurazione attuale sembra saltare questo problema. C'è anche il problema di non aver eseguito un commit + push del ramo corrente prima di provare a cambiare.
Alexis Wilke,

Git ti dirà se le tue modifiche senza commit impediranno il cambio di filiali, quindi non c'è molto di cui preoccuparsi lì, vero? O stai parlando di qualcos'altro?
Marnen Laibow-Koser,

0

Un'altra opzione per ABORT / SKIP / CONTINUE di IDE

VCS> Git> Abort Rebasing

inserisci qui la descrizione dell'immagine


0

Il mio è stato un errore emerso da BitBucket. L' git am --skipho risolto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.