Der Reflog enthält Einträge für Refs ... nicht den Index.
Aber vielleicht ist ein Workflow-Tweak die Antwort hier ... (es war für mich).
Wenn die Arbeit an etwas, das mehr als 5-10 Minuten dauern, begehen-as-you-go (und vor Bereinigung drücken). Ansonsten stage-as-you-go. Die index
ist großartig ... Ich benutze es den ganzen Tag lang! Aber ich benutze es nur wirklich, wenn ich weiß, dass ich innerhalb von ein oder zwei Minuten (im Grunde eine atomare Workflow-Operation) committen werde. Das liegt daran, dass ich Angst habe, dass ich etwas Dummes tun und meinen Index wegblasen werde.
Während ich arbeite, mache ich jedes Mal, wenn ich einen kleinen Meilenstein erreiche, ein privates Commit, das normalerweise erst dann gepusht wird, wenn ich die Möglichkeit hatte, etwas aufzuräumen. Ich beziehe mich weiter, während ich an diesem spezifischen Problem arbeite, das normalerweise geändert wird.
Dann, sobald ich tatsächlich einen stabilen Punkt erreicht habe, wo ich ein öffentliches Commit erstellen möchte, quetsche ich (wenn nötig) alle meine kleinen Wip-Commits zusammen, gib eine nette Commit-Nachricht und drücke.
Dies hat den großen Vorteil, dass bei Bedarf in meinem Reflog kleine Brotkrumen entstehen.
Hier ist mein Workflow:
# start work
git checkout -b featurea
# work
vim file.txt
# reach a little milestone
git commit -a -m "working on feature..."
# work some more
vim file.txt
# reach another little milestone
git commit -a --reuse-message=HEAD --amend
# work some more
vim file.txt
# another little milestone...
git commit -a --reuse-message=HEAD --amend
# finishing touches...
vim file.txt
# ok, done now, put everything back in working dir so I can review
git reset HEAD~
# decide what goes in this commit
# perhaps use `git add -p`
git add file.txt
# give a nice commit message (use editor)
git commit
# now merge to master and push with confidence!
Dieses wie eine Menge Tipparbeit zu sein scheint, aber wenn man fliegen auf der Schale gut erhalten (Vorteil set -o emacs
oder set -o vi
Einnahme eine gute Art und Weise), dann dieser Ansatz wird fast augenblicklich.
Wenn das, woran ich gerade arbeite, eine sehr schnelle Lösung ist, verwende ich in der Regel nur die Stage-As-You-Go-Methode, aber alles, was länger ist, brauche ich die Sicherheit, meinen Reflog zu füllen.
Der Erstellungsdatum Trick ist eine nette Idee. Vielen Dank. – LeGEC
Zu Testzwecken habe ich versucht, alle '.git/objects/ab/cdef ...' Blobs zu finden, die von meinem 'fsck --unreachable' zurückgegeben wurden. Einige der baumelnden Blobs sind nicht da, was bedeutet, dass sie wahrscheinlich in Packdateien gespeichert sind. Kennen Sie schnell die Packdatei, zu der ein Blob gehört? – LeGEC
Ich war auf der Suche nach dem Änderungsdatum der Dateien. Haben Sie einen anderen Trick im Hinterkopf, um das Änderungsdatum eines Blobs zu finden? – LeGEC