Il conflitto di unione git rebase non può continuare


131

Sto cercando di reimpostare 'dev' per raggiungere il ramo 'master'.

$ git checkout dev 
$ git rebase master 
First, rewinding head to replay your work on top of it...
Applying: Corrected compilation problems that came from conversion from SVN.
Using index info to reconstruct a base tree...
M       src/com/....
<stdin>:125: trailing whitespace.
/**
<stdin>:126: trailing whitespace.
 *
<stdin>:127: trailing whitespace.
 */
<stdin>:128: trailing whitespace.
package com....
<stdin>:129: trailing whitespace.

warning: squelched 117 whitespace errors
warning: 122 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging src/com/....
CONFLICT (content): Merge conflict in src/com/...
Failed to merge in the changes.
Patch failed at 0001 Corrected compilation problems that came from conversion from SVN.

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

$ vi src/com/.....   { fixed the merge issue on one file } 
$ git add -A . 
$ git rebase --continue 
src/com/....: needs merge
You must edit all merge conflicts and then
mark them as resolved using git add
$ vi src/com....      { verified, no >>> or <<< left, no merge markers } 
$ git rebase --continue 
Applying: Corrected compilation problems that came from conversion from SVN.
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 would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".

Qualche idea?


Nota: ci sono casi in cui a git rebase --skippotrebbe ancora non funzionare correttamente. Fino a Git 2.0.2 (luglio 2014). Vedi la mia risposta qui sotto
VonC

Risposte:


223

Ci sono un paio di situazioni in cui ho visto rebaserimanere bloccato. Uno è se le modifiche diventano nulle (un commit ha già apportato modifiche nel rebase) nel qual caso potrebbe essere necessario utilizzare git rebase --skip.

È abbastanza facile da dire. Se lo fai, git statusnon dovrebbe mostrare cambiamenti. Se è così, saltalo. In caso contrario, si prega di inviare una copia di git statuse posso provare ad aiutare ulteriormente.


No che fosse, c'erano "no" cambiamenti dovuti. L'ho saltato e poi ho confrontato il file che era come avrebbe dovuto essere.
awm

Questo mi ha aiutato quando il mio 'master git pull --rebase master "è apparso bloccato in un ciclo tra il bisogno di risolvere i conflitti e saltare. Dopo un po' più di pazienza, sono sistemato,
amico

3
lo stato git restituisce: "rebase in progress; into <commitnumber> Al momento stai riassegnando il ramo '<branchname>' su '<commitnumber>'. (risolti tutti i conflitti: esegui" git rebase --continue ")". git rebase --continue non restituisce modifiche mentre git rebase --skip do, ma nel mio caso sto ottenendo quella situazione ancora e ancora. È giusto o c'è qualcosa che non va?
adi

Grazie. Ero preoccupato che --skipavrebbe fatto di peggio che semplicemente andare avanti con le modifiche che ho apportato.
Jchook,

Nel mio caso sia Intellij Idea GUI che SourceTree stavano mostrando che ogni file era stato aggiunto a commit, mentre git statusmostrava che c'era un file che era stato modificato, ma che non era stato aggiunto a commit. L' add somefile.txtesibizione ha permesso di continuare con il rebasing.
Azizbekian,

16

Una delle volte che ho riscontrato questo problema è quando faccio un git commitdopo un git add. Pertanto, la seguente sequenza produrrà l'errore di rebase menzionato:

git add <file with conflict>
git commit -m "<some message>"
git rebase --continue

Mentre, la sequenza seguente viene eseguita senza errori e continua il rebase:
git add <file with conflict>
git rebase --continue

Potrebbe essere possibile che git add -Acon l'opzione "Tutto" si crei una situazione simile. (Nota, sono molto inesperto in git, quindi questa risposta potrebbe non essere corretta.) Per sicurezza, git rebase --skipsembra che funzioni anche in questa situazione.


6

Nota: Git 2.0.2 (luglio 2014) ha risolto un caso in cui si git rebase --skipsarebbe bloccato e non sarebbe stato in grado di proseguire con il rebase corrente.
Vedi commit 95104c7 di brian m. Carlson ( bk2204)

rebase--merge: risolto --skipcon due conflitti di fila

Se si git rebase --mergeverifica un conflitto, --skipnon funzionerebbe se anche il successivo commit fosse in conflitto .
Il msgnumfile non verrebbe mai aggiornato con il nuovo numero di patch, quindi nessuna patch verrebbe effettivamente ignorata, risultando in un loop inevitabile.

Aggiorna il msgnumvalore del file come prima cosa in call_merge.
Ciò evita anche un " Already applied" messaggio quando si salta un commit.
Non vi sono cambiamenti visibili per gli altri contesti in cui viene richiamato call_merge, poiché il valore del file msgnum rimane invariato in tali situazioni.


3
$ vi src/com....      { verified, no >>> or <<< left, no merge markers } 
$ git rebase --continue 

Sembra che ti sei dimenticato git adddelle modifiche ...


Era solo una "verifica", non sono state necessarie modifiche la seconda volta ... git add era proprio sopra di esso.
awm

Bene, hai usato git adde poi continuato l'unione, e si è interrotta perché un altro file ha dei conflitti, quindi devi correggere anche quello. Mi sto perdendo qualcosa qui?
John Brodie,

1
È lo stesso file che segnala che deve essere unito. ok solo per te farò un altro "git add", ma è lo stesso risultato.
awm

Grazie! Questa era la mia situazione: ho risolto i conflitti ma non ho messo in scena i cambiamenti.
Kirill,
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.