Rebase in Git rückgängig machen
In diesem Tutorial geht es um das Rückgängigmachen einer rebase
, die in einem Branch in Git durchgeführt wurde.
Rebasing ist der Vorgang, bei dem die Basis eines Zweigs auf eine neuere Basis verschoben wird. Angenommen, wir haben einen Feature-Branch, der auf dem Haupt-Branch basiert. Dann hat der Hauptzweig einige neue Commits; Vielleicht möchten wir den Feature-Branch basierend auf diesen neuen umbasieren.
Wir können diese rebase
-Operation überdenken. Wir wollen den neuen Feature-Branch nicht mehr auf den neuen Commits im master
-Branch aufbauen.
Wir möchten, dass der Feature-Branch auf den Commits basiert, als wir ihn zum ersten Mal vom Haupt-Branch verzweigt haben. Um dies zu erreichen, müssen wir nun die Operation rebase
rückgängig machen, die für die Verzweigung durchgeführt wurde.
Wir werden dies nun an einem Beispiel veranschaulichen.
Mit git reflog
und git reset
eine rebase
rückgängig machen, die auf einem Branch in Git . gemacht wurde
Nehmen wir an, wir haben einen main
-Zweig, und wir haben darüber einen neuen Zweig feature1
erstellt.
Und nehmen wir an, einige Commits sind im main
-Zweig passiert. Wir haben eine rebase
des neuen Branchs feature1
basierend auf diesen neuen Commits durchgeführt. Dies ist der Vorgang, den wir rückgängig machen möchten.
Um das rebase
rückgängig zu machen, können wir den reflog
-Befehl von Git verwenden. Mit git reflog
können wir den Head-Commit des Branchs unmittelbar vor dem rebase
-Start ermitteln.
Wir werden nun den Befehl git reflog
auf dem Zweig feature1
ausführen (einer, auf dem rebase
ausgeführt wurde)
$ git reflog
b745978 HEAD@{0}: rebase: that commit
4sd7c1c HEAD@{1}: rebase: this commit
adf3d3d HEAD@{2}: checkout: moving from main to feature1
...
Wir können sehen, dass HEAD@{2}
der Commit kurz vor der rebase
-Operation war.
Wir können git reset
verwenden, um den Branch auf diesen Commit wie folgt zurückzusetzen.
$ git reset HEAD@{2} --hard
Nach Ausführung des obigen Befehls befindet sich der Branch feaure1
nun in einem Zustand kurz vor dem rebase
.
Alternativ kann man ein rebase
auch mit git reset
wie folgt rückgängig machen.
$ git reset --hard ORIG_HEAD
Der ORIG_HEAD
wird durch Befehle erzeugt, die Ihren HEAD
drastisch bewegen, um die Position des HEAD
vor deren Betätigung aufzuzeichnen, sodass Sie die Spitze des Zweigs leicht wieder in den Zustand zurückversetzen können, bevor Sie sie ausführen.
Der Vorbehalt gegenüber diesem alternativen Ansatz besteht darin, dass nach dem unerwünschten rebase
keine anderen Operationen durchgeführt werden sollten, die den ORIG_HEAD
-Viz ändern könnten. reset
, rebase
oder merge
.
Somit können wir mit diesen Methoden ein ungewolltes rebase
auf einem Branch in Git rückgängig machen.