Ce face git reset
Comanda git reset permite întoarcerea în timp prin mutarea pointerului ramurii pe un commit din trecut. Are 3 moduri fundamentale de funcționare:
--soft: anulează commit-ul dar păstrează TOATE modificările pregătite în zona de staging (ideal dacă vrei să rescrii commit-ul sau să schimbi mesajul).--mixed (implicit): anulează commit-ul și scoate fișierele din staging, lăsându-le ca simple modificări în directorul de lucru.--hard (periculos!): anulează commit-ul, golește staging-ul și ȘTERGE fizic toate modificările de pe disc, readucând totul exact la starea din acel commit.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
--soft |
Anulează commit-urile, dar lasă toate modificările în zona de staging. |
--mixed (implicit) |
Anulează commit-urile și scoate modificările din staging, dar le păstrează în directorul de lucru. |
--hard |
Anulează tot: șterge modificările din staging și din directorul de lucru (ireversibil pentru modificările necomise!). |
HEAD~1 |
Referă commit-ul imediat anterior celui mai recent. |
Exemple
Exemplul 1: Anularea ultimului commit păstrând codul în staging
Opțiunea –soft mută HEAD cu un pas înapoi fără a pierde nicio linie de cod.
git init -b main demo_reset >/dev/null
cd demo_reset
git config user.name "Test" && git config user.email "test@exemplu.ro"
echo "v1" > f.txt && git add f.txt && git commit -m "commit 1" >/dev/null
echo "v2" > f.txt && git add f.txt && git commit -m "commit 2" >/dev/null
git reset --soft HEAD~1
git status -s
Rezultat
M f.txt
Greșeli frecvente
- Rularea neatentă a lui
git reset --hardpe modificări nesalvate: orice cod scris care nu a fost inclus măcar o dată într-un commit sau stash va fi șters definitiv de pe disc! - Folosirea
git resetpe commit-uri care au fost deja împărtășite cu echipa pe server (push); pentru istoricul public se folosește întotdeaunagit revert.
Comenzi înrudite
git revert: Anulează efectele unui commit din trecut prin crearea unui nou commit invers, fără a altera istoricul.git restore: Restaurează fișierele din directorul de lucru sau scoate modificările din zona de staging.git reflog: Jurnalul de siguranță al depozitului: înregistrează fiecare mutare a indicatorului HEAD și permite recuperarea commit-urilor pierdute.git commit: Înregistrează un nou instantaneu permanent al fișierelor din staging în istoricul depozitului.