Der Git-Rebase-Merge-Konflikt kann nicht fortgesetzt werden

131

Ich versuche, 'dev' neu zu gründen, um den 'Master'-Zweig einzuholen.

$ 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".

Irgendwelche Ideen?

awm
quelle
Hinweis: Es gibt Fälle, in denen a git rebase --skipimmer noch nicht richtig funktioniert. Bis Git 2.0.2 (Juli 2014). Siehe meine Antwort unten
VonC

Antworten:

223

Es gibt einige Situationen, in denen ich gesehen habe, wie rebasesie stecken geblieben sind. Eine ist, wenn die Änderungen null werden (ein Commit enthält Änderungen, die bereits zuvor in der Rebase vorgenommen wurden). In diesem Fall müssen Sie sie möglicherweise verwenden git rebase --skip.

Es ist ziemlich leicht zu sagen. Wenn Sie dies tun git status, sollten keine Änderungen angezeigt werden. Wenn ja, überspringen Sie es einfach. Wenn dies nicht der Fall ist, senden Sie bitte eine Kopie von git statusund ich kann versuchen, weiter zu helfen.

Chris Nicola
quelle
Nein das war es, es waren "keine" Änderungen fällig. Ich habe es übersprungen und die Datei danach verglichen, es war das, was es hätte sein sollen.
awm
Dies hat mir geholfen, als mein 'git pull - rebase origin master' in einer Schleife zwischen der Notwendigkeit, Konflikte zu lösen und zu überspringen, stecken zu bleiben schien. Nach etwas mehr Geduld bin ich fest
entschlossen
3
Der Git-Status gibt Folgendes zurück: "Rebase in Bearbeitung; auf <Commit-Nummer> Sie gründen derzeit den Zweig '<branchname>' auf '<Commit-Nummer>' neu (alle Konflikte wurden behoben: Führen Sie" Git-Rebase - Fortsetzung "aus). git rebase --continue gibt keine Änderungen zurück, während git rebase --skip dies tut, aber in meinem Fall bekomme ich diese Situation immer wieder. Ist das richtig oder stimmt etwas nicht?
adi
Vielen Dank. Ich befürchtete, es --skipwürde schlimmer kommen, als nur mit den Änderungen fortzufahren, die ich vorgenommen hatte.
Jchook
In meinem Fall zeigten sowohl die Intellij Idea-Benutzeroberfläche als auch SourceTree, dass jede Datei zum Festschreiben hinzugefügt wurde, während git statusgezeigt wurde, dass eine Datei geändert, aber nicht zum Festschreiben hinzugefügt wurde. Die add somefile.txtAusführung darf mit dem erneuten Basieren fortgesetzt werden.
Azizbekian
16

Eine der Zeiten, in denen ich auf dieses Problem gestoßen bin, ist, wenn ich eine git commitnach a mache git add. Die folgende Sequenz erzeugt also den von Ihnen erwähnten Rebase-Fehler:

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

Die folgende Sequenz läuft fehlerfrei ab und setzt die Rebase fort:
git add <file with conflict>
git rebase --continue

Es ist möglich, dass git add -Amit der Option "Alle" eine ähnliche Situation entsteht. (Bitte beachten Sie, dass ich in Git sehr unerfahren bin, daher ist diese Antwort möglicherweise nicht korrekt.) Um sicher zu gehen, git rebase --skipscheint das auch in dieser Situation gut zu funktionieren.

Steve Reed
quelle
6

Hinweis: Git 2.0.2 (Juli 2014) hat einen Fall behoben, in dem a git rebase --skipstecken bleiben und nicht mit der aktuellen Rebase fortfahren kann.
Siehe Commit 95104c7 von Brian M. Carlson ( bk2204)

rebase--merge: Behebung --skipmit zwei Konflikten hintereinander

Wenn git rebase --mergeein Konflikt aufgetreten ist, --skipwürde er nicht funktionieren, wenn das nächste Commit ebenfalls in Konflikt gerät .
Die msgnumDatei würde niemals mit der neuen Patch-Nummer aktualisiert, sodass kein Patch übersprungen würde, was zu einer unausweichlichen Schleife führen würde.

Aktualisieren Sie den msgnumWert der Datei als erstes in call_merge.
Dies vermeidet auch eine " Already applied" Meldung beim Überspringen eines Commits.
Für die anderen Kontexte, in denen call_merge aufgerufen wird, gibt es keine sichtbare Änderung, da der Wert der msgnum-Datei in diesen Situationen unverändert bleibt.

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

Sieht so aus, als hättest du git adddeine Änderungen vergessen ...

John Brodie
quelle
Es war nur eine "Überprüfung", keine Änderungen waren beim zweiten Mal erforderlich ... git add war direkt darüber.
awm
Richtig, Sie haben git adddie Zusammenführung verwendet und dann fortgesetzt, und sie wurde gestoppt, weil eine andere Datei Konflikte aufweist. Daher müssen Sie auch diese beheben. Vermisse ich hier etwas?
John Brodie
1
Es ist dieselbe Datei, die gemeldet wird und zusammengeführt werden muss. ok nur für dich mache ich noch ein "git add", aber es ist das gleiche Ergebnis.
awm
Vielen Dank! Das war meine Situation: Ich habe Konflikte gelöst, aber die Änderungen nicht inszeniert.
Kirill