Baza de date Git (folderul .git/objects/) este extrem de robustă, dar coruperea de sistem de fișiere, oprirea bruscă a calculatorului în timpul unui commit mare sau operațiuni repetitive de rebase și reset pot lăsa în urmă obiecte orfane sau neaccesibile. Comenzile git fsck (File System Check) și git prune sunt uneltele de mentenanță de nivel jos ale bazei de date Git.
1. Verificarea completă a integrității depozitului cu git fsck
# Rulează o verificare exhaustivă a tuturor hash-urilor SHA și a legăturilor dintre obiecte:
git fsck --full
# Output tipic pe un depozit sănătos:
# Checking object directories: 100% (256/256), done.
# Checking objects: 100% (4512/4512), done.
# dangling commit 5f3a1b2c...
# dangling blob 8d4e4f1a...
Ce sunt obiectele ‘dangling’ (orfane)?
- Dangling Commit: Un commit care a fost creat în trecut, dar a fost deconectat de la orice ramură activă (de exemplu, commit-uri suprascrise printr-un
git commit --amendsau abandonate după ungit reset --hard). - Dangling Blob: Conținutul unui fișier care a fost adăugat în staging cu
git add, dar pentru care nu s-a rulat niciodatăgit commit.
2. Curățarea fizică a obiectelor orfane cu git prune
# În mod implicit, Git păstrează obiectele orfane timp de 14 până la 90 de zile în reflog
# pentru a-ți permite să le recuperezi în caz de greșeală.
# Dacă vrei să forțezi eliberarea imediată a spațiului pe disc:
# Pasul 1: Expirăm toate referințele istorice din reflog:
git reflog expire --expire=now --all
# Pasul 2: Ștergem fizic toate obiectele orfane:
git prune --expire=now -v