2015-04-27 14 views
54

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

git status 

vedo questo:

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

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

vedo: rebase-applicare

non posso commettere all'origine

git branch 

Spettacoli:

* (no branch, rebasing master) 
    develop 
    master 

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

UDATE: Questa è l'uscita di: 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. Non ha nulla.

risposta

101

Rebase non si verifica in background. "rebase in progress" significa che hai avviato un rebase e che il rebase è stato interrotto a causa di un conflitto. È necessario riprendere il rebase (git rebase --continue) o interromperlo (git rebase --abort).

Come suggerisce il messaggio di errore da git rebase --continue, è stato chiesto a git di applicare una patch che si traduce in una patch vuota. Molto probabilmente, questo significa che la patch è già stata applicata e si desidera eliminarla utilizzando git rebase --skip.

+0

Ho aggiornato il post per includere git rebase - continua per ogni richiesta. –

+0

OK, quindi "rebase --continue does not do anything" era impreciso. Dovresti aver scritto "git rebase --continue errori come segue ..." per ottenere aiuto. –

+2

La documentazione di questo molto male, continua a ripetere che tu "git rebase --continue" e finirai in un modo infinito per dirlo. –

4

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

Si sta riposizionando il master del ramo su quel commit. È possibile terminare il rebase tramite git rebase --abort. Questo tornerebbe allo stato in cui ti trovavi prima che iniziassi a ridiscutere.

2

Recentemente sono entrato in questo stato. Dopo aver risolto i conflitti durante un rebase, ho eseguito le mie modifiche anziché eseguire git rebase --continue. Questo produce gli stessi messaggi che hai visto quando hai eseguito i tuoi comandi git status e git rebase --continue. Ho risolto il problema eseguendo git rebase --abort e quindi rieseguendo il rebase. Si potrebbe probabilmente anche saltare il rebase, ma non ero sicuro di quello stato che mi avrebbe lasciato in.

$ 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 
+0

Oltre a '--abort' (+1), ora hai' --quit' (http://stackoverflow.com/a/41363262/6309) – VonC

0

impostare il mio git-autorebase su un git checkout

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

In caso contrario, si fonde automaticamente quando si passa da un ramo all'altro, che a mio parere è la scelta peggiore possibile come predefinita.

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

Mi hanno fatto per interrompere il rebase, ma prima risolvere il conflitto di, git add /path/to/file il file (un altro modo molto strano per risolvere il conflitto in questo caso ?!), poi fare un git commit -i /path/to/file. Ora posso interrompere l'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 venire dalla interruzione. Risolverò la mia risposta se scoprirò che dovrei abortire il rebase prima.

La --force sulla spinta è necessaria se si salta altri commit ed entrambi i rami non sono liscia (entrambi mancano commit dall'altro).

Problemi correlati