DedSec Project

Git ανάκτηση: reflog, detached HEAD και χαμένες αλλαγές — DedSec Project

Το reflog βοηθά σε commits, όχι απαραίτητα σε άγραφα αρχεία Έλεγξε την κατάσταση πριν από οποιοδήποτε reset Το git status δείχνει αλλαγές του working tree, το git branch --show-current το…

Το reflog βοηθά σε commits, όχι απαραίτητα σε άγραφα αρχεία

Έλεγξε την κατάσταση πριν από οποιοδήποτε reset

Το git status δείχνει αλλαγές του working tree, το git branch --show-current το ενεργό branch και το git log τη σειρά commits. Το detached HEAD δεν σημαίνει αυτομάτως ότι χάθηκε κώδικας· επιτρέπει επιθεώρηση παλιότερου commit. Αν η χαμένη εργασία είχε γίνει commit, το τοπικό reflog μπορεί να διατηρεί το SHA. Μη αποθηκευμένες αλλαγές συνήθως δεν ανακτώνται από αυτό.

git status --short
git branch --show-current
git log --oneline --decorate -8
git reflog -8

Προστάτευσε ό,τι απομένει

Αν στο reflog φαίνεται ύποπτο παλιό commit, κράτησε ολόκληρο SHA και εξέτασέ το με git show --stat <sha>. Δημιούργησε recovery branch μόνο όταν ξέρεις ότι περιέχει το σωστό περιεχόμενο. Μην τρέχεις git reset --hard ή git clean -fd χωρίς επιθεώρηση των επιπτώσεων. Για αρχεία που δεν είχαν γίνει commit, αντέγραψε πρώτα το υπάρχον project σε ξεχωριστό τοπικό directory.

Άσκηση χωρίς πραγματικό κίνδυνο

Σε νέο, προσωρινό repository φτιάξε δύο commits και κάνε checkout το παλιότερο. Παρατήρησε το detached HEAD, δημιούργησε δοκιμαστικό commit και επέστρεψε στο αρχικό branch. Έπειτα βρες το commit από reflog. Αυτό δείχνει πώς λειτουργούν τα αντικείμενα Git, όχι ότι διατηρούνται για πάντα: ο καθαρισμός αντικειμένων και η λήξη reflog μπορούν να τα καταργήσουν.

Κριτήριο ολοκλήρωσης

Σημείωσε παλιό branch, αν υπήρξε commit, το ανακτημένο SHA και ποια αρχεία ελέγχθηκαν. Η ενημέρωση απομακρυσμένου repository είναι χωριστή απόφαση και δεν πρέπει να επαναγράφει το ιστορικό συνεργατών απλώς για να διορθωθεί ένα τοπικό λάθος.

Άσκηση ανάκτησης χωρίς απόρριψη εργασίας

Δούλεψε σε άδειο προσωρινό directory με τοπική συνθετική Git identity. Δημιούργησε note.txt με one, κάνε add/commit και σημείωσε το hash A. Άλλαξε το κείμενο σε two, κάνε commit και σημείωσε B. Με git switch --detach A, χρησιμοποιώντας το πραγματικό hash, δημιούργησε detached.txt και κάνε commit C. Το git switch - μπορεί να επιστρέψει στο προηγούμενο branch. Στο git reflog --date=iso -8 πρέπει να φαίνεται η detached εργασία.

Εξέτασε το C με git show --stat C και δημιούργησε git branch recovered C, βάζοντας τον πραγματικό κωδικό. Το git show recovered:detached.txt εμφανίζει committed περιεχόμενο χωρίς checkout ή αντικατάσταση των τωρινών αρχείων. Δεν απαιτείται reset, clean, force push ή remote.

Μη committed δεδομένα χρειάζονται άλλη διαδρομή

Το reflog καταγράφει κινήσεις references σε αυτό το τοπικό repository. Δεν αποθηκεύει αυτόματα unstaged bytes, untracked αρχεία ή εργασία άλλου clone. Για αυτά εξέτασε editor history, filesystem backup, προηγούμενο stash ή αντίγραφο του working tree. Το git stash list επιθεωρεί διαθέσιμα stashes χωρίς να υποθέτει ότι υπάρχουν. Προστάτευσε ό,τι ανέκτησες πριν από cleanup και ξεχώρισε το όνομα branch από το commit που δείχνει σήμερα.

Πηγή: git reflog.