Open Source Quicktipp Software

[Quicktipp] Git Merge rückgängig machen + push zum origin

Wer viel mit Git arbeitet und bestehende Branches auf eine aktuelle Version aktualisiert, der Merged wahrscheinlich auch mal falsch. Dazu kommt dann meistens noch der Git Push zum Origin Server.

Das ist in meinen Augen alles halb so wild, da Git ein sehr mächtiges Werkzeug ist und auch Git Merges rückgängig gemacht werden können. Damit der falsche Merge gar nicht auftaucht bin ich immer den harten Weg gegangen und habe folgenden Befehl ausgeführt:

git reset --hard HEAD~1
git push -f

Den Branch habe ich immer um ein Commit hart abgeschnitten und somit den Merge Commit rückgängig gemacht. Damit der Server beim Senden (push) nicht rumzickt kam noch ein force Push. „Das ist leider nicht die eleganteste Lösung, doch es funktioniert“ – wie man so schön sagt.

Die saubere Lösung

Fast überall gibt es einen guten und schlechten Weg. Git hat zum Glück auch für diesen Fall eine saubere Lösung die ganz ohne force Push auskommt. Gemeint ist der Befehl git revert. Hiermit lässt sich ein Commit rückgängig machen und ohne force Push an den Origin Server senden. Natürlich lassen sich mit git revert auch Merge Commits rückgängig machen. Das geschieht mit diesem Befehl:

git revert -m 1 f467b6e
git push

Da ein Merge immer aus mehreren Commits besteht und somit einen parallelen Zweig zum Master Branch besitzt, muss an dieser Stelle angegeben welcher Zweig entfernt werden soll.

---o---o---o---M---x---x---W---x
/
---A---B-------------------C---D

Mit -m 1 wird angegeben das man zum Baum des ersten Elternteils vor dem Zusammenführen zurückkehren möchte. Der Commit Hash sagt wo die Übertragung von dem gemergden Zweig anfängt.

Linus erklärt

Sehr interessant und hilfreich ist zu genau diesem Thema der E-Mail Verkehr von Linus Torvalds (revert-a-faulty-merge.txt). Er erklärt wie genau man vorgehen sollte, wie es funktioniert und warum es so ist.

Hilfreiche Links

Kommentare (1)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.