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?


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.


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.


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.


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.