git log
zeigt den aktuellen KOPF und seine Herkunft. Das heißt, es werden die Commit-HEAD-Punkte gedruckt, dann das übergeordnete Element, das übergeordnete Element usw. Es durchläuft die Abstammung des Repos, indem es rekursiv die Eltern jedes Commits nachschlägt.
(In der Praxis haben einige Commits mehr als ein übergeordnetes Element. Um ein repräsentativeres Protokoll anzuzeigen, verwenden Sie einen Befehl wie git log --oneline --graph --decorate
.)
git reflog
durchquert die Abstammung von HEAD überhaupt nicht. Das Reflog ist eine geordnete Liste der Commits, auf die HEAD hingewiesen hat: Es macht den Verlauf Ihres Repos rückgängig. Das Reflog ist nicht Teil des Repos selbst (es wird separat zu den Commits selbst gespeichert) und ist nicht in Pushs, Fetches oder Klonen enthalten. es ist rein lokal.
Nebenbei: Wenn Sie das Reflog verstehen, können Sie keine Daten aus Ihrem Repo mehr verlieren, wenn diese festgeschrieben wurden. Wenn Sie versehentlich auf ein älteres Commit zurückgesetzt oder eine falsche Basis neu erstellt haben oder eine andere Operation, die Commits visuell "entfernt", können Sie mithilfe des Reflogs feststellen, wo Sie sich zuvor befanden, und git reset --hard
zurück zu diesem Ref, um Ihren vorherigen Status wiederherzustellen. Denken Sie daran, Refs implizieren nicht nur das Commit, sondern die gesamte Geschichte dahinter.
.git/logs/refs/<branch>
Einträge das Format<old_rev> <new_rev> [...] <timestamp> [...]
. Sie können versuchen, nach Zeitstempel zu verketten und zu sortieren. Einige Zeilennew_rev
stimmen jedoch möglicherweise nicht mit den nächsten überein.old_rev
In diesem Fall vermute ich, dass das Reflog ungültig ist. Sie könnten dann versuchen, gefälschte Einträge einzufügen, um die Sequenz zu "reparieren", aber es scheint mir zu mühsam.git log
Zeigt das Commit-Protokoll an, auf das über die Refs zugegriffen werden kann (Köpfe, Tags, Fernbedienungen).git reflog
ist eine Aufzeichnung aller Commits, auf die zu irgendeinem Zeitpunkt in Ihrem Repo verwiesen wird oder wurde.Aus diesem Grund wird
git reflog
(eine lokale Aufzeichnung, die standardmäßig nach 90 Tagen gelöscht wird) verwendet, wenn Sie eine "destruktive" Operation ausführen (z. B. das Löschen eines Zweigs), um den SHA1 zurückzugewinnen, auf den dieser Zweig verwiesen hat.Siehe
git config
:git reflog
wird oft als " Ihr Sicherheitsnetz " bezeichnetIm Falle von Problemen lautet der allgemeine Ratschlag, wenn Git Log Ihnen nicht zeigt, wonach Sie suchen:
Auch hier ist Reflog eine lokale Aufzeichnung Ihres SHA1.
Im Gegensatz zu
git log
: Wenn Sie Ihr Repo auf ein Upstream-Repo verschieben , sehen Sie dasselbegit log
, aber nicht unbedingt dasselbegit reflog
.quelle
Hier ist die Erklärung
reflog
aus dem Pro Git-Buch :Der
reflog
Befehl kann auch verwendet werden, um zu alte Einträge zu löschen oder Einträge aus dem Reflog abzulaufen. Aus der offiziellen Linux Kernel Git Dokumentation fürreflog
:quelle
git log
liefert Ihnen das nicht die gleichen Informationen? Es tut mir leid, wenn es offensichtlich erscheint, ich bin sehr neu in GIT und möchte kurz vor meinem ersten OMG einige Grundlagen erlernen.HEAD
Zeigers) und der Commits, auf die sie gezeigt haben. Ist das sinnvoll?log
Nebenbei bemerkt, kann Ihnen auch Reflog-Informationen anzeigen, aber Sie müssen ein spezielles Optionsflag als Argument übergeben--walk-reflogs
.Ich war auch neugierig und möchte nur ein wenig näher darauf eingehen:
git log
Zeigt einen Verlauf aller Ihrer Commits für den Zweig an, in dem Sie sich befinden. Wenn Sie einen anderen Zweig auschecken, wird ein anderer Commit-Verlauf angezeigt. Wenn Sie sehen möchten, dass Sie den Verlauf für alle Zweige festschreiben, geben Sie eingit log --all
.git reflog
zeigt eine Aufzeichnung Ihrer Referenzen, wie Cupcake sagte. Bei jedem Commit oder Checkout gibt es einen Eintrag. Versuchen Sie einige Male zwischen zwei Zweigen hin und her zu wechselngit checkout
und führen Sie siegit reflog
nach jedem Checkout aus. Der oberste Eintrag wird jedes Mal als "Checkout" -Eintrag aktualisiert. Sie sehen diese Art von Einträgen nicht ingit log
.Referenzen: http://www.lornajane.net/posts/2014/git-log-all-branches
quelle
Ich stelle mir den Unterschied zwischen Git Log und Reflog gerne als den Unterschied zwischen einem privaten und einem öffentlichen Datensatz vor.
Privat gegen öffentlich
Mit dem Git-Reflog verfolgt es alles, was Sie lokal getan haben. Hast du dich verpflichtet? Reflog verfolgt es. Haben Sie einen Hard-Reset durchgeführt? Reflog verfolgt es. Haben Sie ein Commit geändert ? Reflog verfolgt es. Alles, was Sie vor Ort getan haben, gibt es im Reflog.
Dies gilt nicht für das Protokoll. Wenn Sie ein Commit ändern, wird im Protokoll nur das neue Commit angezeigt. Wenn Sie einen Reset durchführen und einige Commits in Ihrem Verlauf überspringen, werden die von Ihnen übersprungenen Commits nicht im Protokoll angezeigt. Wenn Sie Ihre Änderungen an einen anderen Entwickler oder an GitHub oder ähnliches übertragen, wird nur der im Protokoll verfolgte Inhalt angezeigt. Für einen anderen Entwickler sieht es so aus, als ob die Zurücksetzungen nie stattgefunden haben oder die Änderungen nie stattgefunden haben.
Das Protokoll ist poliert. Das Reflog ist lapidar.
Also ja, ich mag die Analogie "privat gegen öffentlich". Oder vielleicht ist eine bessere Analogie zwischen Log und Reflog "poliert gegen Lapidarium". Das Reflog zeigt alle Ihre Versuche und Fehler. Das Protokoll zeigt nur eine saubere und polierte Version Ihres Arbeitsverlaufs.
Schauen Sie sich dieses Bild an, um den Punkt hervorzuheben. Seit der Initialisierung des Repositorys wurden einige Änderungen und Zurücksetzungen vorgenommen. Das Reflog zeigt alles. Mit dem Befehl log sieht es jedoch so aus, als hätte es bisher nur ein Commit gegen das Repo gegeben:
Zurück zur Idee des Sicherheitsnetzes
Da das Reflog die von Ihnen geänderten Änderungen festhält und die zurückgesetzten Commits festhält , können Sie diese Commits erneut suchen, da Sie die Commit-IDs erhalten. Angenommen, Ihr Repository wurde nicht von alten Commits gelöscht, sodass Sie Elemente wiederbeleben können, die im Protokoll nicht mehr sichtbar sind. Auf diese Weise rettet der Reflog manchmal die Haut von Personen, wenn sie etwas zurückbekommen müssen, von dem sie dachten, dass sie es versehentlich verloren haben.
quelle
Tatsächlich ist Reflog ein Alias für
Die Antwort sollte also lauten: Es ist ein spezifischer Fall.
quelle
git log
,-g
ist die Kurzform für--walk-reflogs
. Das erklärt also nichts.