Git Stash

Zamislite da radite na delu projekta i on počinje da bude neuredan. Došlo je do hitne greške kojoj je potrebna vaša hitna pažnja. Vreme je da sačuvate promene i promenite grane. Problem je u tome što ne želite da commit-ujete pola posla. Rešenje je git stash.

Stashing je zgodan ako trebate brzo prebaciti kontekst i raditi na nečem drugom, ali ste na pola puta kroz promenu koda i niste baš spremni za commit.Autor Bitbucket

Stashing

Recimo da trenutno imate nekoliko lokalnih modifikacija. Pokrenite [git status](https://kolosek.com/git-commands-tutorial-part2/) da biste proverili trenutno stanje:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#      modified:   index.html
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#      modified:   assets/stylesheets/styles.css

Moramo da poradimo na toj hitnoj grešci. Prvo, želimo da sačuvamo nedovršene radne promene bez njihovog izvršenja. Ovde git stash dolazi kao spasitelj:

$ git stash
Saved working directory and index state WIP on master:
  bb06da6 Modified the index page
HEAD is now at bb06da6 Modified the index page
(To restore them type "git stash apply")

Vaš radni direktorijum je sada čist i sve ne-commit-ovane lokalne promene su sačuvane! U ovom trenutku možete slobodno unositi nove promene, kreiranje novog commit-a, menjanje grane i izvoditi bilo koje druge Git operacije.

Po defaultu su stash-ovane datoteke identifikovane kao „WIP“ - rad u toku, na vrhu grane i commit-a se iz kojeg su stvorene.

Ponovna Primena Vašeg Stash-a

Git stash je privremeno skladište. Kada budete spremni da nastavite tamo gde ste stali, možete lako da vratite sačuvano stanje: git stash pop.

Iskakanjem vašeg skrivanja uklanjaju se promene iz vašeg skladišta i ponovo se primenjuje poslednje sačuvano stanje. Ako želite da zadržite promene i u stash, umesto toga možete koristiti git stash apply.

Dodatni Saveti i Trikovi

Postoji nekoliko drugih stvari koje možete učiniti sa stash-om. Hajde da pogledamo!

Čuvanje stash-a
Sačuvajte stash sa porukom: $ git stash save <message>.

Isprobajte ovo dodavanjem CSS linije u svoje stilove i sakrijte ga lepim komentarom.

Stash datoteka bez praćenja
Ovo je jedini način da sačuvate datoteke koje nisu praćene: $ git stash -u ili $ git stash --include-untracked
Listing više stash-eva
Kada koristite git stash ili git stash save, Git će stvoriti objekt Git commit sa imenom, a zatim će ga sačuvati u vašem repo-u. Spisak stash-eva koje ste napravili možete pogledati u bilo kom trenutku! $ git stash list.

$ git skrivena lista
stash @ {0}: Na glavnom: Izmenjena stranica indeksa
stash @ {1}: VIP na masteru: bb06da6 Početno urezivanje

Delimični stash
Možete odabrati da stash-ujete samo jednu datoteku, kolekciju datoteka ili pojedinačne promene unutar datoteka: $ git stash -p ili $ git stash --patch.

RSpec testovi su neophodni u projektima Rubi on Rails, ali možda nisu uvek kompletni. Spremite samo onaj deo koji je spreman za upotrebu!

Pregled stash razlika
Postoje dva načina za pregled skrivene datoteke: da biste videli punu razliku stash-a - $ git stash show -p ili pogledajte samo najnovij stash - $ git stash show.

$ git skrivena emisija
indek.html | 1 +
stile.css | 2 ++
Promenjene su 2 datoteke, 3 umetanja (+)

Stvaranje grane iz stash-a
Napravite novu granu na koju ćete stash promene, a zatim na nju stavite stash promene: $ git stash branch <branch_name> <stash_id>.

Ovo je još jedan način da sačuvate stash pre nego što nastavite sa projektom.

Uklanjanje stash-a
Koristite ga oprezno, možda je teško vratiti. Jedini način da ga vratite je ako niste zatvorili terminal nakon brisanja stash-a.
Ako vam više nije potreban određen stash, možete ga izbrisati pomoću: $ git stash drop <stash_id>. Ili možete izbrisati sve iz repo-a pomoću: $ git stash clear.

Nadam se da vam je ovaj članak pomogao da bolje razumete kako stash funkcioniše. Obavezno ga testirajte!

Sledeći članak je upravo o napuštanju stash! Pretplatite se i informišite se kada za to dođe vreme!