Ce face git stash
Comanda git stash este salvatoare când ești în mijlocul scrierii unei funcționalități noi și trebuie să schimbi urgent ramura (de exemplu pentru a rezolva un bug critic în producție), dar codul tău nu este încă gata pentru a face un commit.
Ia toate modificările tale locale și le pune ‘la sertar’ (pe o stivă de tip LIFO). Directorul tău devine curat, identic cu ultimul commit. Când termini urgența, revii pe ramură și restaurezi modificările cu git stash pop.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
push -m MESAJ |
Salvează modificările curente pe stivă adăugând un mesaj descriptiv (util dacă ai mai multe stash-uri). |
pop |
Reaplică cel mai recent stash din stivă peste directorul de lucru și îl șterge din listă. |
apply |
Reaplică cel mai recent stash dar îl PĂSTREAZĂ în stivă (util pentru aplicare pe mai multe ramuri). |
list |
Afișează lista tuturor stash-urilor salvate în depozit. |
drop [ID] |
Șterge un stash specific din listă (ex. git stash drop stash@{0}). |
clear |
Șterge complet toate stash-urile din depozit. |
-u, --include-untracked |
Include în stash și fișierele nou create care nu sunt încă urmărite de Git. |
Exemple
Exemplul 1: Salvarea și recuperarea modificărilor
Punem deoparte modificările, lăsând directorul curat, apoi le readucem cu pop.
git init -b main demo_stash >/dev/null
cd demo_stash
git config user.name "Test" && git config user.email "test@exemplu.ro"
echo "linie veche" > fisier.txt && git add fisier.txt && git commit -m "init" >/dev/null
echo "lucru neterminat" >> fisier.txt
git stash -m "In lucru la functia X" >/dev/null
git status -s
git stash pop >/dev/null
cat fisier.txt
Rezultat
linie veche
lucru neterminat
Greșeli frecvente
- Uitarea faptului că
git stashimplicit NU include fișierele noi (untracked); dacă ai creat fișiere noi, foloseștegit stash -u. - Acumularea a zeci de stash-uri uitate pe care nu le mai recunoști (verifică periodic lista cu
git stash list).
Comenzi înrudite
git switch: Comută pe o altă ramură sau creează și trece pe o ramură nouă.git restore: Restaurează fișierele din directorul de lucru sau scoate modificările din zona de staging.git reset: Mută indicatorul ramurii curente (HEAD) la un commit anterior și ajustează staging-ul sau fișierele locale.