Imaginați-vă că lucrați la o caracteristică într-un proiect de software controlat de Git. Sunteți chiar în mijlocul efectuării unor modificări atunci când primiți o cerere de remediere a unei erori critice. Pentru a începe rezolvarea problemei, aveți nevoie de o nouă ramură și un director de lucru curat. Când vine vorba de comenzile de bază Git, aveți două opțiuni:
git reset --hard
pentru a elimina modificările necondiționate.Prima opțiune își pierde toată munca, în timp ce aceasta din urmă are ca rezultat o comitere parțială care nu are semnificație. Nici unul dintre aceste scenarii nu este de dorit.
Aici este locul unde git stash
comanda intră în joc. Ca git reset --hard
, vă oferă un director de lucru curat, dar vă înregistrează, de asemenea, schimbările incomplete pe plan intern. După remedierea defecțiunii critice, puteți să reaplicați aceste modificări și să le ridicați de unde ați rămas. Vă puteți gândi git stash
ca un "buton de pauză" pentru munca în desfășurare.
Acest tutorial presupune că ați instalat Git și că sunteți familiarizat cu fluxul de lucru de bază. Ar trebui să vă simțiți confortabil, să creați comitete și să lucrați cu sucursale. De asemenea, veți avea nevoie de un depozit Git pentru a experimenta.
Înainte de a putea rula git stash
, trebuie să aveți niște modificări necondiționate în depozitul dvs. Git. De exemplu, dacă ați editat un fișier numit foo.py
, ta git status
ieșirea ar arăta astfel:
Pe master-ul de ramură Modificările nu sunt programate pentru comitere: (utilizați "git add... "pentru a actualiza ceea ce va fi angajat) (utilizați" checkout git -- ... "pentru a renunța la modificările din directorul de lucru) modificat: foo.py
Pentru a stoca aceste modificări, pur și simplu executați git stash
fără argumente.
git stash
Acest lucru va lua atât modificările dvs. etapate, cât și cele nesecate, le înregistrați intern, apoi ștergeți directorul de lucru. Acest lucru vă oferă posibilitatea de a trece la o nouă filială și de a dezvolta alte funcții fără să vă faceți griji în legătură cu comiterea dvs. parțială.
Când sunteți gata să reveniți la munca dvs. incompletă, executați următoarea comandă pentru a reaplica modificările blocate:
git stash pop
Cel mai recent set de modificări stocate va apărea din nou în directorul dvs. de lucru și puteți continua exact acolo unde ați rămas. Cam despre asta e.
La fel ca git merge
comanda, git stash pop
poate duce la conflicte dacă aceleași secțiuni ale codului sursă s-au modificat de când ați executat git stash
. Când se întâmplă acest lucru, veți vedea următorul mesaj după ce îl difuzați git stash pop
:
Fuzionarea automată a foo.py CONFLICT (conținut): Mergeți în conflict în foo.py
Veți găsi, de asemenea, fișierul afectat listat sub Căile neregulate
secțiune în git status
ieșire, precum și liniile afectate din fișierul sursă.
<<<<<<< Updated upstream print("Recently committed changes"); ======= print("Incomplete work"); >>>>>>> Schimbări blocate
Va trebui să rezolvați manual conflictul din fișierul sursă, dar, de obicei, nu doriți să îl angajați imediat după cum ați git merge
conflict. De cele mai multe ori, veți continua să lucrați la caracteristica neterminată până când veți pregăti o comisie semnificativă. Apoi, puteți să-l adăugați la index și să-l comiteți ca de obicei. Cu alte cuvinte, puteți trata git stash pop
conflicte la fel ca orice alte schimbări neangajate.
Pentru majoritatea scenariilor, comenzile de mai sus sunt tot ce aveți nevoie atunci când vine vorba de un "buton de pauză". Dar, înțelegerea modului în care sunt reprezentate schimbările stunate deschide ușa pentru o utilizare mai avansată.
Până acum, am vorbit doar despre stingerea unui singur set de modificări. Cu toate acestea, de fiecare dată când alergi git stash
, modificările necondiționate sunt stocate pe o stivă. Acest lucru înseamnă că puteți stoca mai multe setări de modificări în același timp.
Acest lucru este util în stadiile incipiente de dezvoltare atunci când nu sunteți sigur care direcție doriți să luați. În loc să-ți pierzi schimbările git reset --hard
, puteți să păstrați instantaneele de lucru în stadiul de stocare în cazul în care doriți să le aplicați ulterior.
Puteți inspecta stiva de stocare cu listă
parametru.
git stash list
Dacă ați fi executat anterior git stash
de trei ori, aceasta ar produce ceva de genul:
stash @ 0: WIP pe noua caracteristică: 5cedccc Încercați ceva stash nebun @ 1: WIP pe noua caracteristică: 9f44b34 Realizați un stash diferit de direcție @ 2: WIP pe noua caracteristică: 5acd291 Începeți o nouă caracteristică
git stash pop
comanda întotdeauna reaplică cel mai recent instantaneu, cel din partea de sus a stiva de stocare. Dar, este posibil, de asemenea, să alegeți și să alegeți fotografiile pe care doriți să le aplicați din nou aplica
comanda. De exemplu, dacă doriți să reaplicați al doilea set de modificări, ați folosi următoarea comandă:
git stash aplică stash @ 1
Ca și cum git stash pop
, modificările vor apărea din nou în directorul de lucru și puteți continua să lucrați la caracteristica incompletă. Rețineți că acest lucru nu va elimina automat fotografia din stiva de stocare. În schimb, va trebui să o ștergeți manual cu cădere brusca
comanda.
git stash drop stash @ 1
Din nou, lucrul cu stiva de stocare este mai mult un caz de margine pentru majoritatea utilizatorilor Git. git stash
și git stash pop
comenzile ar trebui să fie suficiente pentru majoritatea nevoilor dvs., deși git stash list
se poate dovedi utilă și dacă ați uitat unde a avut loc ultima operațiune de stash.
Comandarea instantaneelor semnificative se află în centrul oricărui flux de lucru Git. Obligațiile capabile, încapsulate fac mult mai ușor să navighezi în istoricul proiectului, să dai seama unde au fost introduse bug-uri și să revii la schimbări.
Deși nu este o comandă de zi cu zi, git stash
poate fi un instrument foarte convenabil pentru crearea de comitete semnificative. Acesta vă permite să stocați munca incompletă evitând în același timp necesitatea de a comite instantanee parțiale în istoricul de proiect permanent. Țineți cont de aceasta la următoarea dată când doriți să întrerupeți tot ce ați lucrat și să vă întoarceți mai târziu.