snippets · bash

Ich habe einen Branch oder Commit verloren – ist er wirklich weg?

Nach einem reset, Rebase oder gelöschten Branch zeigt git log den gesuchten Commit nicht mehr. Das fühlt sich an wie Datenverlust.

Das Problem

git log zeigt Commits, die über die gerade betrachteten Referenzen erreichbar sind. Ein Commit kann trotzdem noch lokal existieren, obwohl kein Branch mehr darauf zeigt.

Erster Check

git reflog --date=local

Der Reflog protokolliert, wohin lokale Referenzen wie HEAD gezeigt haben. Suche nach dem Zustand unmittelbar vor dem Fehlgriff.

Wenn du einen plausiblen Hash gefunden hast, nicht sofort resetten. Erst einen Rettungsbranch anlegen:

git branch recovery/<name> <COMMIT>
git log --oneline --decorate recovery/<name> -10

Damit bekommt der Commit wieder eine normale Referenz und du kannst in Ruhe prüfen, ob es der richtige Zustand ist.

Was der Reflog nicht kann

Uncommittete Änderungen sind etwas anderes. Wenn Daten nie committed, gestasht oder anderweitig gespeichert wurden, kann ein Reflog sie nicht magisch rekonstruieren.

Warum dieser Weg sicherer ist

Ein neuer Branch verändert weder Working Tree noch aktuellen Branch. Erst wenn du weißt, was du gerettet hast, entscheidest du über Merge, Cherry-Pick oder Reset.

Quelle: https://git-scm.com/docs/git-reflog