Git
Reflog - Wiederherstellen von Commits, die nicht im Git-Log angezeigt werden
Suche…
Bemerkungen
Bei Gits Refflog wird bei jeder Änderung die Position von HEAD (der Referenz für den aktuellen Status des Repositorys) aufgezeichnet. Im Allgemeinen umfasst jede Operation, die möglicherweise destruktiv ist, das Verschieben des HEAD-Zeigers (da sich bei Änderungen, auch in der Vergangenheit, der Hash-Befehl des Commits ändert), ist es immer möglich, vor einer gefährlichen Operation in einen älteren Zustand zurückzukehren , indem Sie die rechte Linie im reflog finden.
Objekte, auf die von keinem Ref verwiesen wird, werden in der Regel innerhalb von 30 Tagen gesammelt. Der Reflog kann also nicht immer helfen.
Wiederherstellen von einer schlechten Rebase
Angenommen, Sie haben eine interaktive Basis gestartet:
git rebase --interactive HEAD~20
und versehentlich haben Sie einige Commits, die Sie nicht verlieren wollten, gestaucht oder fallen gelassen, aber dann die Rebase abgeschlossen. Zur Wiederherstellung führen Sie git reflog
aus. Möglicherweise sehen Sie eine Ausgabe wie diese:
aaaaaaa HEAD@{0} rebase -i (finish): returning to refs/head/master
bbbbbbb HEAD@{1} rebase -i (squash): Fix parse error
...
ccccccc HEAD@{n} rebase -i (start): checkout HEAD~20
ddddddd HEAD@{n+1} ...
...
In diesem Fall ist das letzte Commit, ddddddd
(oder HEAD@{n+1}
), die Spitze Ihres Zweigs, der sich vor dem Rebase-Modus befindet . Um dieses Commit (und alle übergeordneten Commits, einschließlich der versehentlich zusammengedrückten oder verworfenen) Commits wiederherzustellen, führen Sie Folgendes aus:
$ git checkout HEAD@{n+1}
Sie können dann an diesem Commit mit git checkout -b [branch]
einen neuen Zweig erstellen. Weitere Informationen finden Sie unter Verzweigung .