Commit wieder herstellen nach git reset —hard HEAD
Online seit Tue 25 November 2014 in Digital
Es kommt schon mal vor, dass man in der Eile schnell schnell was dummes macht!
Folgende Situation:
Ich hatte ein paar LaTeX-Dateien bearbeitet und in dieser alles mögliche hin und her geschoben, während mein Kollege eine kleine Einleitung schrieb. Außerdem hatten wir festgestellt, das eine Datei an falscher Stelle war. Wir löschten sie beide, er pushte und ich arbeitete weiter. Dann konnte ich nicht mehr pushen, weil mein Repostitory natürlich vom Server divergiert war. Es war eilig, wir wollten gehen und es sollte aber einigermaßen sauber sein, damit wir daran weiterarbeiten können. Also hatte ich mit git reset —hard HEAD mein Repository zurückgesetzt und wollte dann die Änderungen wieder zurück spielen. Problem: es ging nicht! Die Zwischenablage ist halt kein so sicherer Speicher.
Schaute man sich das git log jedoch an, war mein Commit komplett verschwunden. Das ist durchaus richtig so, denn das macht nun mal ein Reset. Der komplette Baum wurde umgehängt auf die Reihenfolge vom origin/master.
Das Schöne bei git (oder einem VCS im Allgemeinen) was einmal hinzugefügt wurde sollte auch wiederherzustellen sein. Nach ein bisschen Suchen stieß ich auf die Anleitung von git ready.
Zuerst muss man die Revisionsnummer des “verlorenen” Commits herausbekommen,
git fsck --lost-found
Dieser Befehl liefert die Liste der dangling also der baumelnden (nicht mehr verbundenen) Revisionen
Hat man die entsprechende Versionsnummer ist der Rest einfach. Man muss den aktuellen Stand nur noch mit dem benötigten zusammenführen.
git merge $REVISIONSNUMMER
erledigt das und nach einem push ist auch auf dem Server alles so wie es sein sollte.