git commit manuell rückgängig machen



  • Ich habe ein git commit gemacht und einige Sekunden später ist mir wie so oft die SSD rausgerutscht. Das zum aktuellen HEAD gehörende tree object hat nun eine Größe von 0 und git verweigert den Dienst. Nun möchte ich wieder den Zustand vor dem kaputten Commit haben.

    Ich hab mir gedacht, ich trage in .git/refs/heads/master den letzten Commit ein und in .git/ORIG_HEAD dann den davor. Reicht das um die Integrität wiederherzustellen? Was ist mit den Dateien in "logs"? Diese wurden wohl auch nicht fertig geschrieben, am Ende befinden sich eine Reihe von Nullbytes. Tut das was zur Sache, was da drin steht, oder sind das write-only-Dateien?



  • Ich würds mal versuchen, das tönt gut. Die unreferenzierten Dateien werden durch den "git gc" irgendwann gelöscht.



  • Ok, hab das nun versucht und sicherheitshalber auch die Nullbytes in den Logs entfernt. So ganz in Ordnung ist es dadurch nicht, ein git commit schlägt fehl, aber dafür funktioniert git push. Damit kann ich nun das kaputte Repository löschen und eine frische Kopie ziehen.

    War irgendwie klar, dass sobald ich einmal lange kein git push mache, gleich irgendwas kaputt geht. Aber nochmal Glück gehabt.


Log in to reply