Ich stehe vor einem Problem, dessen Lösung ich nicht sicher bin.
Ich habe eine Rebase gegen den Meister aus meiner Branche gemacht:
git rebase master
und bekam den folgenden Fehler
First, rewinding head to replay your work on top of it...
Applying: checkstyled.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging AssetsLoader.java
CONFLICT (content): Merge conflict in AssetsLoader.java
Failed to merge in the changes.
Patch failed at 0001 checkstyled.
Also ging ich zu meinem Lieblingseditor, behebte den 1-Zeilen-Konflikt, speicherte die Datei und machte einen Git-Status und bekam die folgende Ausgabe:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: PassengerContactHandler.java
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: AssetsLoader.java
#
Ich habe ein Git hinzugefügt, AssetsLoader.java und einen Git-Status hinzugefügt und Folgendes erhalten:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: AssetsLoader.java
# modified: PassengerContactHandler.java
#
und als ich git rebase gemacht habe - weiter bekomme ich:
git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
Ich weiß, dass ich den Patch überspringen und die Rebase fortsetzen kann, bin mir jedoch nicht sicher, ob die Änderungen in PassengerContactHandler.java in meinem Zweig neu basiert werden oder nicht.
Ich bin mir also nicht sicher, wie ich vorgehen soll.
Bearbeiten: Könnte es sein, dass die Datei mit dem gelösten Konflikt genau der Originalversion entspricht?
Vielen Dank, Lucas
Edit, es ist mir gerade wieder passiert:
Es ist mir einfach wieder passiert,
(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: assets/world/level1/Level-1.xml
# modified: George.java
# modified: DefaultPassenger.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# mb-art/originalAssets/27dec/
((307ac0d ...) | REBASE) $ git rebase - weiter
You must edit all merge conflicts and then
mark them as resolved using git add
Git - Version
git version 1.7.1
git status
, oder? Kein fehlender Abschnitt darunter?git-rebase
sollte niemals melden, dass es ungelöste Konflikte gibt, wenn es keine gibt. Wenn Sie es schaffen, das Problem in einem einfacheren Testfall zu reproduzieren, ist das Debuggen viel einfacher. Wenn Sie jedochgit status
keine Konflikte melden, wenn dies dergit rebase --continue
Fall ist und Ihre Version von Git aktuell ist, können Sie versuchen, dem Git-Entwickler eine E-Mail zu senden Mailingliste unter [email protected] mit so vielen Diagnoseinformationen wie möglich.Antworten:
Dies liegt daran, dass Sie beim Beheben eines Konflikts den gesamten Code im Patch entfernt haben, der auf den Zweig angewendet wurde, auf dem Sie die Basis neu erstellen. Verwenden Sie,
git rebase --skip
um fortzufahren.Ein bisschen mehr Details:
Wenn Sie einen Konflikt während des erneuten Basierens beheben, bearbeiten Sie normalerweise die widersprüchliche Datei, wobei ein Teil oder der gesamte Code des Patches beibehalten wird, der derzeit auf den Zweig angewendet wird, auf dem Sie neu basieren. Nachdem Sie den Patch repariert und ausgeführt haben
Sie erhalten eine (normalerweise grüne) Linie mit der geänderten Datei
git rebase --continue funktioniert in dieser Situation einwandfrei.
Manchmal entfernen Sie jedoch bei der Lösung des Konflikts alles in Ihrem neuen Patch und behalten nur Code aus dem Zweig bei, auf dem Sie neu basiert haben. Wenn Sie nun die Datei hinzufügen, entspricht sie genau der Datei, auf der Sie versucht haben, eine neue Basis zu erstellen. Der Git-Status zeigt keine grüne Linie an, in der die geänderten Dateien angezeigt werden. Nun, wenn Sie das tun
git wird sich beschweren mit
Was Git in dieser Situation eigentlich von dir verlangt, ist zu benutzen
um den Patch zu überspringen. Früher habe ich das nie gemacht, da ich immer unsicher war, was tatsächlich übersprungen werden würde, wenn ich es tun würde, war mir nicht klar, was "diesen Patch überspringen" wirklich bedeutete. Aber wenn Sie keine grüne Linie mit bekommen
Nachdem Sie die in Konflikt stehende Datei bearbeitet, hinzugefügt und den Git-Status ausgeführt haben, können Sie ziemlich sicher sein, dass Sie den gesamten Patch entfernt haben, und Sie können ihn stattdessen verwenden
weitermachen.
... aber verlassen Sie sich nicht darauf (und fügen Sie keine verbleibenden Dateien in Ihre Repository-Ordner ein)
quelle
git add ...
Das Tippen wird sehr ärgerlich, nachdem ein Haufen von Dateien mit langen Pfaden geändert wurde. Gibt es eine, diegit add --all-the-files-i-changed
ich vorher laufen kanngit rebase continue
?Scheint ein Fehler in Git 1.7 zu sein
Hier ist ein guter Artikel, wie man das löst .
Grundsätzlich sollte es funktionieren, wenn Sie a
nach der Lösung Ihrer Konflikte und dann
sollte arbeiten.
quelle
Ich habe diese Warnung erhalten, als ich nicht bereitgestellte Dateien hatte. Stellen Sie sicher, dass Sie keine nicht bereitgestellten Dateien haben. Wenn Sie nicht möchten, dass sich die nicht bereitgestellten Dateien ändern, verwerfen Sie die Änderungen mit
quelle
Versuchen Sie dies in Ihrer Befehlszeile auszuführen:
Sollte einen interaktiven Editor aufrufen, mit dem Sie die Konflikte lösen können. Einfacher als der Versuch, es manuell zu tun, und auch Git erkennt, wann Sie die Zusammenführung durchführen. Vermeidet auch Situationen, in denen Sie nicht versehentlich vollständig zusammenführen, was passieren kann, wenn Sie versuchen, dies manuell zu tun.
quelle
Stellen Sie nach dem Beheben des Konflikts sicher, dass die geänderten Dateien zu Ihren bereitgestellten Dateien hinzugefügt wurden. Dies löste das Problem für mich.
quelle
Sie haben einen Zusammenführungskonflikt in AssetsLoader.java verpasst. Öffnen Sie es und suchen Sie nach Konfliktmarkierungen (">>>>", "====", "<<<<<") und fügen Sie dann git erneut hinzu. Machen Sie eine "Git Diff - Inszenierung", wenn Sie Schwierigkeiten haben, sie zu finden.
quelle
git diff --staged
etwas Nützliches? Dies gibt an, welche Änderungen Sie zu diesem Zeitpunkt in der Rebase festschreiben möchten, um die Zusammenführungskonflikte zu lösen. In einer der Dateien sollte ein "Ups, das wollte ich nicht tun, um dieses Problem zu beheben" -Bit stehen.git add
eine Datei auch mit Konfliktmarkierungen erstellen. Schließlich können solche Dateien vollkommen legal sein!Ich hatte gerade dieses Problem, und obwohl ich denke, dass es einige Ursachen geben könnte, ist hier meine ...
Ich hatte einen Git-Pre-Commit-Hook, der Commits unter bestimmten Bedingungen ablehnte. Dies ist in Ordnung, wenn Sie manuell festschreiben, da die Ausgabe des Hooks angezeigt wird und ich sie entweder korrigieren oder mit commit --no-verify ignorieren kann.
Das Problem scheint zu sein, dass beim erneuten Basieren von rebase --continue auch der Hook aufgerufen wird (um die letzten Änderungen vorzunehmen). Bei der Rebase wird die Hook-Ausgabe jedoch nicht angezeigt. Es wird lediglich angezeigt, dass sie fehlgeschlagen ist. Anschließend wird ein weniger spezifischer Fehler ausgegeben: "Sie müssen alle Zusammenführungskonflikte bearbeiten und sie dann mit git add als gelöst markieren."
Um dies zu beheben, führen Sie alle Ihre Änderungen durch und versuchen Sie statt "git rebase --continue" ein "git commit". Wenn Sie unter dem gleichen Hakenproblem leiden, sollten Sie die Gründe sehen, warum es fehlschlägt.
Interessanterweise akzeptiert Git Rebase zwar nicht die Ausgabe von Git Hook, akzeptiert jedoch eine --no-verify, um die Hooks zu umgehen.
quelle
git rebase
akzeptiert ich die--no-verify
Option. Es wird jedoch nur derpre-rebase
Hook weggelassen, diese Option wird jedoch bei den nachfolgenden Aufrufen von nicht angewendetgit commit
.Ich bin gerade über das Thema gestolpert. Ich würde
git rebase --skip
da nichtgit status
deutlich gestaffelte Modifikationen zeigen, die ich behalten wollte. Obwohl ich einige zusätzliche Dateien hatte, die unerwartet kamen. Ich beschloss mitnicht getaggte Änderungen zu entfernen, war dann
git rebase --continue
erfolgreich.quelle
Sobald Sie Ihre Änderungen korrigiert haben, vergessen Sie möglicherweise, 'git add -A' auszuführen.
quelle