Kurze Antwort:
git reset 'HEAD@{1}'
Lange Antwort:
Git führt ein Protokoll aller Ref-Updates (z. B. Auschecken, Zurücksetzen, Festschreiben, Zusammenführen). Sie können es anzeigen, indem Sie Folgendes eingeben:
git reflog
Irgendwo in dieser Liste befindet sich das Commit, das Sie verloren haben. Angenommen, Sie haben gerade getippt git reset HEAD~
und möchten es rückgängig machen. Mein Reflog sieht so aus:
$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]
Die erste Zeile besagt, dass vor HEAD
0 Positionen (mit anderen Worten, die aktuelle Position) 3f6db14 ist; es wurde durch Zurücksetzen auf erhalten HEAD~
. Die zweite Zeile besagt, dass vor HEAD
1 Position (mit anderen Worten der Status vor dem Zurücksetzen) d27924e ist. Es wurde durch Auschecken eines bestimmten Commits erhalten (obwohl dies momentan nicht wichtig ist). Um den Reset rückgängig zu machen, führen Sie git reset HEAD@{1}
(oder git reset d27924e
) aus.
Wenn Sie andererseits seitdem einige andere Befehle ausgeführt haben, die HEAD aktualisieren, steht das gewünschte Commit nicht ganz oben auf der Liste, und Sie müssen die durchsuchen reflog
.
Ein letzter Hinweis: Es ist möglicherweise einfacher, nach dem reflog
Zweig zu suchen, den Sie zurücksetzen möchten, z. B. Master, als nach HEAD
:
$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]
Dies sollte weniger Lärm als der allgemeine haben HEAD reflog
.