git stash

Tymczasowo odkłada niezacommitowane zmiany, aby wyczyścić drzewo robocze.

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; clear kasuje 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.