Cum funcționează resetarea Git?

Vrei să știi cum este Git restabili opțiuni?

Într-o serie de cursuri Git pe Envato Tuts +, am trecut prin câteva concepte fundamentale ale lui Git în videoclipuri simple.

În acest videoclip din serie, veți afla totul despre resetarea Git. Veți vedea cum să utilizați fiecare tip de resetare și modul în care aceste soiuri interacționează cu cei trei arbori Git:

  • moale: modifică numai HEAD, dar nu schimbă fișierele staged în index sau fișiere de lucru.
  • amestecat: se mută HEAD și actualizează indexul cu conținutul revizuirii la care HEAD indică acum.
  • greu: mută HEAD și actualizează indexul și directorul de lucru - aceasta este singura versiune a resetării care poate cauza pierderea datelor.

De asemenea, vă voi arăta cum să utilizați git reset pe fișiere individuale.

Git de bază: Resetați

 

Cum funcționează Git Reset

Git resetare. Ce face? Ea anulează unele modificări care sunt locale pentru computer. Când ați făcut ceva lucru pe care trebuie să îl derulați înapoi, resetați-vă prietenul. Poți să începi. Puteți săriți înainte și înapoi între conținuturile diferitelor comitete și călătoriți puțin.

Aveți câteva opțiuni la dispoziția dvs. cu resetare git. Puteți merge greu, moale și mixt, și puteți de asemenea să operezi și să ții obiecte de comitere sau să le faci la un nivel de fișier individual. 

Fiecare dintre aceste trei variante afectează anumiți copaci care folosesc git pentru a gestiona fișierele și conținutul lor.

Cum reacționează Git afectează cele trei copaci

Metaforic vorbind, fiecare opțiune de resetare modifică un copac diferit, o parte diferită a modului în care git salvează instantanee. 

Copacii, despre ce vorbim aici? Git utilizează directorul de lucru, indexul (cunoscut și ca zona de așteptare) și ceva numit HEAD pentru crearea și recuperarea comitetelor. 

Directorul de lucru vă permite să modificați fișierele pe care le puteți transforma în index. Această zonă de așteptare vă permite să reglați fin și să selectați ceea ce doriți să puneți în următorul angajament. Un obiect de comitere este o versiune criptografică a conținutului dvs. Ea are unele metadate adăugate și îndreaptă înapoi la comitete anterioare care ne permite să facem biții noastre de călătorie timp. 

HEAD este o referință care indică astfel de obiecte de comitere. Este doar un indicator care se actualizează cu fiecare nou angajament sau schimbare de ramură. Puteți să-l mutați și să vizați orice punct în timp cu obiectul de comitere. 

Pentru mai multe informații despre copaci și altele, uitați-vă la videoclipul meu despre cei trei copaci și despre Git. Acesta acoperă fluxul de lucru de bază în Git și reprezintă o bază solidă pentru a înțelege mai bine logica utilizării resetării git.

Diferitele opțiuni de resetare au fost explicate

Acum, să ne uităm la diferitele opțiuni.

Git reset --hard

Acest lucru merge în total nouă metri. Acesta va muta mai întâi HEAD și va actualiza indexul cu conținutul comitetului HEAD este acum îndreptat spre. Apoi, acesta va actualiza directorul de lucru cu conținutul indexului, eventual distrugând conținutul pe care l-ați modificat în directorul de lucru.

Prin urmare, este singura versiune a resetării git, care este un pic periculoasă dacă nu știți ce faceți. 

Git reset - amestecat

Aceasta va muta HEAD și, de asemenea, va actualiza indexul cu conținutul comitetului dorit că HEAD nu indică. Directorul de lucru nu este afectat de acea operație.

Opțiunea mixtă este cea implicită dacă nu oferiți resetare git cu o opțiune. Este întotdeauna un director de lucru sigur, deci nu trebuie să vă fie frică să vă pierdeți munca. 

Git resetare - soft

Această opțiune va muta numai HEAD și se va opri chiar acolo. De fapt, aceasta va anula ultima comandă git commit.

Directorul de lucru și fișierele care ar putea fi organizate nu sunt încă afectate de acea operație. 

Utilizarea unei căi de fișier

Cu toate aceste opțiuni pentru resetarea git, specificați în mod specific git unde să opriți reluarea, reintroducerea conținutului și a fișierelor din comitetele anterioare pentru a specifica arborii pe care doriți să îi afectați. Putem face un pas mai departe și resetarea programului cu o cale de fișier.

Dacă utilizați o cale, Git nu va muta HEAD. De ce? Deoarece HEAD indică un obiect de comitet și nu poate indica doar un subset al acestuia. Cu alte cuvinte, HEAD nu indică anumite fișiere, ci să comită obiecte care constau în fișiere bloc și anumite metadate. Indicele și directorul de lucru, pe de altă parte, pot fi abordate în felii felii.

Doar indexul și directorul de lucru joacă un rol atunci când utilizați o cale. Pur și simplu copiază conținutul unui fișier în index și nu poate face altceva. git resetați unele-file.ext presupune că în mod implicit ai vrut să spui git reset - amestecat HEAD some-file.ext și nu va afecta directorul de lucru.

Apropo, pentru că HEAD nu se poate mișca, opțiunea soft ar fi inutilă. Să presupunem că ați lucrat la versiunea 3 a unui fișier și l-ați adăugat în index pentru următorul dvs. comentariu. Acum doriți să dezlegați aceste modificări. Alerga git resetați unele-file.ext să deconectați dosarul respectiv.

Ca rezultat, indicele va fi populat de starea fișierului dvs. de la versiunea 2, versiunea din ultimul angajament pe care se află comanda HEAD. Modificările pe care le-ați efectuat în fișierul dvs., versiunea 3 practic, sunt încă disponibile în directorul de lucru. Totuși, puteți obține aceste modificări pentru a realiza versiunea 3 a acestui fișier.

Deci, ce faceți cu dumneavoastră git resetați unele-file.ext se manipulează numai indexul. 

Resetați vs. Verificare

Ce ziceti git reset --hard some-file.ext? De ce nu putem folosi și asta? 

Această funcționalitate este realizată de Git checkout cu un nume de fișier. git checkout unele-file.ext este de fapt ceea ce git reset --hard some-file.ext ar face, dar Git nu ne lasa sa folosim optiunea grea.

Să facem un alt pas mai departe. Putem viza orice angajament de a reseta un anumit fișier, nu doar cel mai recent reprezentat de HEAD. Aceasta resetează fișierele direcționate din index la starea unei anumite comiteri, din nou, fără a afecta directorul de lucru sau orice comitere.

După ce ați resetat indexul la starea unui anumit comitet, o actualizare înapoi a tipurilor, puteți utiliza Git checkout cu un nume de fișier pentru a verifica conținutul indexului în directorul dvs. de lucru. 

De ce să folosiți checkout-ul? pentru că git reset --hard cu un fișier nu este ceva ce vă permite Git.

Dar fii atent. Utilizarea Git checkout cu o cale de fișiere va scăpa de cele mai noi modificări în directorul dvs. de lucru și îl veți înlocui cu versiunea fișierului în acea comitere specifică.

Urmăriți mai multe cursuri Git

Dacă ați găsit acest lucru util, de ce nu verificați mai multe cursuri Git?

Ai putea viziona introducerea noastră în Git și GitHub sau încerca celelalte cursuri de cafea în această serie:

  • Git de bază: cele trei copaci
  • Git Basics: Cererile GitHub Pull
  • Git de bază: filiale
  • Git de bază: Statele
  • Git de bază: Merge și Rebase
Cod