481 Stimmen

Vollständig einen Rebase abbrechen

Ich habe ein Rebase durchgeführt, so wie hier:

git rebase --onto master new_background_processing export_background_processing

Das hat nicht das gemacht, was ich wollte, also habe ich ein Reset ausgeführt:

git reset --hard HEAD@{1}

Ich habe meinen Branch in den Zustand zurückversetzt, in dem er war, aber ich habe diese Nachricht erhalten als ich git status eingegeben habe:

# Du führst momentan ein Rebase des Branches 'export_background_processing' auf 'e378641' durch.

Wie kann ich dieses Rebase komplett abbrechen? Bin mir nicht sicher, was das genau bedeutet.

782voto

Benutze git rebase --abort. Aus der offiziellen Linux-Kernel-Dokumentation für git rebase:

git rebase --continue | --skip | --abort | --edit-todo | --quit

152voto

VonC Punkte 1117238

Im Falle eines vergangenen Rebase, den Sie nicht ordnungsgemäß abgebrochen haben, haben Sie jetzt (Git 2.12, Q1 2017) git rebase --quit

Siehe commit 9512177 (12. Nov 2016) von Nguyen Thái Ngoc Duy (pclouds). (Eingefügt von Junio C Hamano -- gitster -- in commit 06cd5a1, 19. Dez 2016)

rebase: füge --quit hinzu, um den Rebase aufzuräumen, lasse alles andere unberührt

Es kommt vor, dass Sie sich entscheiden, einen laufenden Rebase abzubrechen und etwas anderes zu tun, aber Sie vergessen zuerst "git rebase --abort" auszuführen. Oder der Rebase läuft schon so lange, dass Sie ihn vergessen haben. Bis Sie merken (z.B. durch das Starten eines anderen Rebases), dass es bereits zu spät ist, um Ihre Schritte zurückzuverfolgen. Die Lösung besteht normalerweise aus

rm -r .git/

und fahren Sie mit Ihrem Leben fort.
Es könnten jedoch zwei verschiedene Verzeichnisse für existieren (und das erfordert offensichtlich etwas Wissen darüber, wie ein Rebase funktioniert), und der ".git"-Teil könnte viel länger sein, wenn Sie sich nicht im obersten Verzeichnis oder in einem verknüpften Arbeitsbaum befinden. Und "rm -r" in .git ist sehr gefährlich, ein Fehler darin könnte die Objektdatenbank oder andere wichtige Daten zerstören.

Bieten Sie "git rebase --quit" für diesen Anwendungsfall an, indem Sie einem Präzedenzfall folgen, der "git cherry-pick --quit" ist.


Vor Git 2.27 (Q2 2020) wurden die von "git merge --autostash" erstellten Stash-Einträge zum Speichern des anfänglichen Dirty-Status versehentlich beim "git rebase --quit" verworfen, was korrigiert wurde.

Siehe commit 9b2df3e (28. Apr 2020) von Denton Liu (Denton-L).
(Eingefügt von Junio C Hamano -- gitster -- in commit 3afdeef, 29. Apr 2020)

rebase: speichere Autostash-Eintrag im Stash Reflog bei --quit

Unterzeichnet von: Denton Liu

In a03b55530a ("merge: teach --autostash option", 07. Apr 2020, Git v2.27.0 -- merge aufgeführt in batch #5), wurde die Option --autostash für git merge eingeführt.

(Siehe "Kann “git pull” automatisch Änderungen einlagern und wiederherstellen?")

Besonders, wenn git merge --quit mit einem vorhandenen Autostash-Eintrag ausgeführt wird, wird er im Stash-Reflog gespeichert.

Dies steht im Gegensatz zum aktuellen Verhalten von git rebase --quit, bei dem der Autostash-Eintrag einfach aus der Existenz gelöscht wird.

Übernehmen Sie das Verhalten von git merge --quit in git rebase --quit und speichern Sie den Autostash-Eintrag im Stash-Reflog anstatt ihn einfach zu löschen.

15voto

vonbrand Punkte 10792

Du hast Glück, dass du den Rebase nicht abgeschlossen hast, so dass du immer noch git rebase --abort machen kannst. Wenn du den Rebase abgeschlossen hättest (es ändert die Geschichte), wären die Dinge viel komplexer gewesen. Erwäge, die Spitzen von Branches zu taggen, bevor du potenziell schädliche Operationen durchführst (insbesondere Geschichtsänderungen), so kannst du zurückspulen, wenn etwas schief geht.

14voto

Almas Adilbek Punkte 4251

Wenn Sie "Rebasing" sind, "Bereits mit dem Rebase begonnen" haben, den Sie abbrechen möchten, kommentieren Sie einfach alle in der Rebase-Editor aufgeführten Commits mit (#).

Als Ergebnis erhalten Sie eine Befehlszeilenmeldung

Nichts zu tun

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X