Le conflit de fusion Git rebase ne peut pas continuer

131

J'essaye de rebaser 'dev' pour rattraper la branche '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".

Des idées?

awm
la source
Remarque: dans certains cas, a git rebase --skipne fonctionne toujours pas correctement. Jusqu'à Git 2.0.2 (juillet 2014). Voir ma réponse ci
VonC

Réponses:

223

Il y a quelques situations où j'ai vu rebaserester coincé. La première est que les modifications deviennent nulles (une validation contient des modifications qui ont déjà été apportées précédemment dans le rebase), auquel cas vous devrez peut-être utiliser git rebase --skip.

C'est assez facile à dire. Si vous le faites git status, aucun changement ne devrait apparaître. Si c'est le cas, sautez-le. Si ce n'est pas le cas, veuillez poster une copie de git statuset je peux essayer de vous aider davantage.

Chris Nicola
la source
Non, c'était ça, il n'y avait "aucun" changement dû. Je l'ai sauté et comparé le fichier après, c'était ce qu'il aurait dû être.
awm
Cela m'a aidé lorsque mon 'git pull --rebase origin master "semblait rester coincé dans une boucle entre la nécessité de résoudre les conflits et de sauter. Après un peu plus de patience, je suis corrigé, ty!
AnneTheAgile
3
git status renvoie: "rebase in progress; on <commitnumber> Vous rebasez actuellement la branche '<branchname>' sur '<commitnumber>'. (tous les conflits corrigés: exécutez" git rebase --continue ")". git rebase --continue ne renvoie aucun changement alors que git rebase --skip le fait, mais dans mon cas, je reçois cette situation encore et encore. Est-ce vrai ou quelque chose ne va pas?
adi le
Merci. J'avais peur --skipque ça fasse pire que de simplement passer à autre chose avec les changements que j'ai faits.
jchook
Dans mon cas, l'interface graphique Intellij Idea et SourceTree montraient que chaque fichier avait été ajouté dans la validation, alors que git statusmontraient qu'il y avait un fichier qui avait été modifié, mais qui n'a pas été ajouté dans la validation. L'exécution a add somefile.txtpermis de continuer avec le rebasage.
azizbekian
16

Une des fois où j'ai rencontré ce problème, c'est en faisant un git commitaprès a git add. Ainsi, la séquence suivante produira l'erreur de rebase que vous mentionnez:

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

Alors que, la séquence ci-dessous s'exécute sans aucune erreur et continue le rebase:
git add <file with conflict>
git rebase --continue

Il est possible git add -Aqu'avec l'option "Tous" crée une situation similaire. (Veuillez noter que je suis très inexpérimenté en git, donc cette réponse peut ne pas être correcte.) Pour être sûr, le git rebase --skipsemble également bien fonctionner dans cette situation.

Steve Reed
la source
6

Remarque: Git 2.0.2 (juillet 2014) a corrigé un cas où un git rebase --skiprestait bloqué et ne pouvait pas continuer avec le rebase actuel.
Voir commit 95104c7 par brian m. carlson ( bk2204)

rebase--merge: correction --skipavec deux conflits d'affilée

En cas de git rebase --mergeconflit, --skipne fonctionnera pas si la prochaine validation est également en conflit .
Le msgnumfichier ne serait jamais mis à jour avec le nouveau numéro de patch, donc aucun patch ne serait réellement ignoré, ce qui entraînerait une boucle inéluctable.

Mettez à jour la msgnumvaleur du fichier comme première chose dans call_merge.
Cela évite également un Already appliedmessage " " lors du saut d'un commit.
Il n'y a pas de changement visible pour les autres contextes dans lesquels call_merge est appelé, car la valeur du fichier msgnum reste inchangée dans ces situations.

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

Il semble que vous ayez oublié git addvos modifications ...

John Brodie
la source
Ce n'était qu'une "vérification", aucune modification n'était nécessaire la deuxième fois ... git add était juste au-dessus.
awm
D'accord, vous avez utilisé git addpuis continué la fusion, et elle s'est arrêtée car un autre fichier a des conflits, vous devez donc le réparer également. Est-ce que j'ai râté quelque chose?
John Brodie
1
C'est le même fichier qui doit être fusionné. ok juste pour toi je vais faire un autre "git add", mais c'est le même résultat.
awm
Merci! C'était ma situation: j'ai résolu les conflits mais pas mis en scène les changements.
Kirill