Wie kann ich zum letzten Commit im Verlauf zurückkehren, nachdem ich „Git Reset“ verwendet habe, um zu einem älteren Änderungssatz zu wechseln?
Frage
Angenommen, meine Geschichte geht so:
A - B - C - D (Master)
Wenn ich mache git reset B
, ich bekomme:
A - B (Meister)
Das Problem ist, git log
Zeigt mir jetzt nur noch die Geschichte von A nach B, und ich kann C und D nicht mehr sehen.
Wie kann ich zu D zurückkehren?
Lösung
Sie sollten D mit sehen können git reflog
.
Sieh dir das an Artikel zum Beispiel.
Commits werden nur dann tatsächlich gelöscht, wenn Sie git gc --prune verwenden (seien Sie also vorsichtig damit!).
Wenn Sie git reflog jetzt in einem Repository ausführen, in dem Sie gearbeitet haben, werden Sie viele Änderungen sehen, die etwa so aussehen:
c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master
Diese Zeilen können in 4 Teile unterteilt werden:
- Hash festschreiben,
- Commit-Zeiger,
- Aktion,
- und zusätzliche Informationen.
Wenn wir den Commit zurückerhalten wollten, der verloren ging
HEAD@{1}
, wir könnten einfachgit reset --hard HEAD@{2}
.
Jetzt sind unser aktueller Zweig (und unsere Arbeitskopie) auf den Repository-Status vor dem Zurücksetzen gesetzt.Wenn wir nur sehen wollten, wie dieser Zustand war, könnten wir das tun
git checkout -b temp HEAD@{2}
(odergit checkout HEAD@{2}
wenn Sie Git 1.5.0 und höher haben).
Andere Tipps
Ok, habe es gefunden.
Sie können verwenden git reflog
.
Ich wusste nicht, wofür es war, aber jetzt kann ich sehen, dass es ein Protokoll aller Referenzen ist, auf die HEAD verwiesen hat.