Ich habe einen Git-Zweig (v4 genannt), der erst gestern vom Master erstellt wurde. Es gab ein paar Änderungen am Master, die ich in v4 bekommen möchte. In Version 4 habe ich versucht, eine Rebase vom Master durchzuführen, und eine Datei bringt immer wieder Probleme: eine einzeilige Textdatei, die die Versionsnummer enthält. Diese Datei app/views/common/version.txt
enthält vor dem erneuten Basieren diesen Text:
v1.4-alpha-02
Folgendes mache ich:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
Das version.txt
sieht jetzt so aus:
<<<<<<< HEAD:app/views/common/version.txt
v1.4-alpha-02
=======
v1.4-alpha-01
>>>>>>> new version, new branch:app/views/common/version.txt
Also, ich räume auf und es sieht jetzt so aus:
v1.4-alpha-02
und dann habe ich versucht weiterzumachen: zuerst versuche ich ein Commit:
> git commit -a -m "merged"
# Not currently on any branch.
nothing to commit (working directory clean)
Kein Glück da. Also habe ich versucht, die Datei hinzuzufügen:
git add app/views/common/version.txt
Keine Antwort. Keine Nachricht ist eine gute Nachricht, denke ich. Also versuche ich fortzufahren:
> git rebase --continue
Applying: new version, new branch
No changes - did you forget to use 'git add'?
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
An diesem Punkt, nachdem ich mich damit beschäftigt habe, stoße ich meinen Kopf vom Schreibtisch.
Was ist denn hier los? Was mache ich falsch? Kann mich jemand klarstellen?
EDIT - für unutbu
Ich habe die Datei wie vorgeschlagen geändert und erhalte den gleichen Fehler:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
git rebase master
und lässt es scheitern ; 2) dann bearbeiten Sie esversion.txt
und machen es so, wie es an diesem Punkt aussehen sollte, und speichern die Bearbeitung; 3) dann dugit add .../version.txt
; 4) dann tust dugit rebase --continue
( nicht 'festschreiben' )! Wenn diesrebase --continue
hier erfolgreich ist, ist es bereits festgeschrieben (hier nicht erforderlichgit commit
!).git push
Sie müssen also nur noch (wenn Sie ein Remote-Repo verwenden). Hoffe das hilft, wenn ich es richtig verstanden habe:)
- Prost!Antworten:
Ich habe ein ähnliches Problem mit einer Rebase festgestellt. Mein Problem wurde verursacht, weil einer meiner Commits nur eine Datei geändert hat und ich beim Auflösen die in diesem Commit eingeführte Änderung verworfen habe. Ich konnte mein Problem lösen, indem ich das entsprechende Commit (
git rebase --skip
) übersprang .Sie können dieses Problem in einem Test-Repository reproduzieren. Erstellen Sie zuerst das Repository.
Übernehmen Sie dann den ursprünglichen Inhalt von
version.txt
in master.Erstellen Sie den
v4
Zweig und ändern Sie den Inhalt vonversion.txt
.Gehen Sie zurück zu
master
und ändern Sie den Inhalt von,version.txt
damit es während der Rebase zu einem Konflikt kommt.v4
Wechseln Sie zurück zum Zweig und versuchen Sie, die Basis neu zu erstellen. Es schlägt mit einem Konfliktversion.txt
wie geplant fehl .Wir lösen den Konflikt durch Auswahl des
master
Inhalts vonversion.txt
. Wir fügen die Datei hinzu und versuchen, unsere Rebase fortzusetzen.Es schlägt fehl ! Mal sehen, welche Änderungen
git
sich in unserem Repository befinden.Ah ah, es gibt keine Veränderung. Wenn Sie die vorherige Fehlermeldung ausführlich gelesen haben, haben Sie
git
uns darüber informiert und die Verwendung empfohlengit rebase --skip
. Er sagte zu uns: "Wenn nichts mehr zu inszenieren ist, besteht die Möglichkeit, dass etwas anderes bereits dieselben Änderungen eingeführt hat. Vielleicht möchten Sie diesen Patch überspringen." Also überspringen wir einfach das Commit und die Rebase ist erfolgreich.Ein Wort der Vorsicht : Bitte beachten Sie, dass
git rebase --skip
das Commit, dasgit
versucht hat, die Basis wiederherzustellen , dadurch vollständig gelöscht wird. In unserem Fall sollte dies in Ordnung sein, dagit
die Beschwerde ein leeres Commit ist. Wenn Sie der Meinung sind, dass Sie nach Abschluss der Rebase Änderungen verloren haben, können Siegit reflog
die Commit-ID Ihres Repositorys vor der Rebase abrufen undgit reset --hard
Ihr Depot wieder in diesen Zustand versetzen (dies ist eine weitere destruktive Operation).quelle
git rebase --skip
überspringen Sie jedoch nur ein einziges Commit. Ichgit status
gebe im Allgemeinen ein aus, bevor ich ein Commit überspringe, um zu sehen, ob ich mich in dieser Situation befinde.rebase --skip
:).git reflog purge
odergit reflog delete
Sie können Ihre Änderungen trotzdem mit zurückbekommengit reflog
. Versuchen Sie, die verschiedenen Commits zu überprüfen, auf die dort verwiesen wird. Eine davon sollte der Status Ihres Baums sein, bevor Sie das Ganze gestartet habengit rebase
.Zitat von hier: http://wholemeal.co.nz/node/9
quelle
Diese Fehlermeldung ist ein Ergebnis Ihrer
git commit -a -m "merged"
. Wenn Sie die Datei nur reparieren, dann ausführengit add <file>
undgit rebase --continue
, sollte es gut funktionieren.git rebase --continue
versucht, ein Commit durchzuführen, stellt jedoch fest, dass keine Änderungen an Commit ausstehen (da Sie diese bereits festgeschrieben haben).quelle
git add <file>
löst das Problem nicht. berichtetgit rebase --continue
immer nochNo changes - did you forget to use 'git add'?
Ändern Sie app / views / common / version.txt in
Denken Sie an dieser Stelle in der Rebase daran, dass Sie Zusammenführungskonflikte lösen, um den Fortschritt des Nicht-Master- Zweigs anzuzeigen .
Also, beim Umbasieren von
zu
Der Konflikt, den Sie lösen, besteht darin, wie Sie A * im Themenzweig erstellen.
Also nach tun
git rebase --abort
sollten die Befehle seinquelle
Das Verhalten, das Sie sehen, ist nicht das, was ich von einer typischen Rebase mit nur diesem Konflikt erwarten würde. Ziehen Sie in Betracht, einen separaten Zweig zu verwenden, um diese Rebase durchzuführen (insbesondere, wenn Sie die Commits bereits per Fernzugriff übertragen haben, damit Sie schnell vorspulen). Auch
git mergetool
kann hilfreich sein , Konflikte zu lösen und die Erinnerung ein auszustellengit add
.In diesem minimalen Beispiel funktioniert die Rebase wie erwartet. Können Sie ein Beispiel angeben, das das Verhalten zeigt, das Sie sehen?
quelle
Hier sind ein paar Ideen:
rm -rf .git/rebase-apply
quelle