git stash odkłada na bok Twoje niezacommitowane zmiany (zarówno te z staging area, jak i z drzewa roboczego) i przywraca pliki do stanu z ostatniego commita. Dostajesz czyste drzewo robocze, a odłożone zmiany lądują na stosie, z którego możesz je przywrócić w dowolnym momencie. Klasyczny przypadek: jesteś w połowie roboty, a tu nagle trzeba szybko przełączyć branch albo zrobić pilny fix. Zamiast commitować bałagan, chowasz go do schowka.
Składnia i najważniejsze opcje
Podstawowa forma: git stash [push|pop|list|drop|apply|show] [opcje]. Samo git stash to skrót dla git stash push.
push— odkłada zmiany na stos (domyślna akcja); przyjmuje opcje i ścieżki plików.pop— przywraca ostatni schowek i usuwa go ze stosu.apply— przywraca schowek, ale zostawia go na stosie (przydatne, gdy chcesz wgrać te same zmiany w kilku miejscach).list— pokazuje wszystkie schowki (np.stash@{0},stash@{1}).drop— usuwa konkretny schowek;clearkasuje wszystkie.-m— dodaje czytelny opis schowka, żebyś po tygodniu wiedział, co tam wrzuciłeś.-u/--include-untracked— bierze też nowe, nieśledzone pliki (domyślnie zostają w drzewie).-k/--keep-index— odkłada zmiany, ale zostawia w drzewie to, co masz w staging area.
Przykłady użycia
git stash— szybko chowa wszystkie śledzone zmiany i czyści drzewo robocze.git stash push -m "wip: formularz logowania"— odkłada zmiany z opisem, łatwiej je później odnaleźć na liście.git stash -u— chowa również nowe pliki, których Git jeszcze nie śledzi.git stash list— wyświetla cały stos schowków z numerami i opisami.git stash pop stash@{1}— przywraca konkretny schowek (nie tylko ostatni) i zdejmuje go ze stosu.
Częste błędy i pułapki
Najczęstsza wpadka: nieśledzone pliki nie trafiają do schowka. Robisz git stash, przełączasz branch i dziwisz się, że nowy plik dalej wisi w drzewie. Rozwiązanie to -u.
Druga pułapka to różnica między pop a apply. pop usuwa schowek po przywróceniu, więc jeśli przy przywracaniu wystąpi konflikt scalania, schowek nie zostaje automatycznie usunięty (i dobrze) — ale w starszych scenariuszach łatwo się pogubić, co jeszcze jest na stosie. Sprawdzaj git stash list.
Pamiętaj też, że git stash drop i git stash clear są nieodwracalne w normalnym trybie — skasowanego schowka nie zobaczysz w git log. Składnia stash@{n} w niektórych powłokach (np. zsh) wymaga cudzysłowów albo escapowania nawiasów klamrowych.
Powiązane komendy: git commit, git checkout, git switch, git restore, git reset.