git reset în Git

Mută indicatorul ramurii curente (HEAD) la un commit anterior și ajustează staging-ul sau fișierele locale.

Sintaxă comandă
git reset [opțiuni] [commit]

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 --hard pe 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 reset pe commit-uri care au fost deja împărtășite cu echipa pe server (push); pentru istoricul public se folosește întotdeauna git 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.