Git Succinct Anularea modificărilor

Întregul punct de a menține copii "sigure" ale unui proiect software este pacea minții: în cazul în care proiectul dvs. se va rupe brusc, veți ști că aveți acces ușor la o versiune funcțională și veți putea să precizați precis unde se află problema a fost introdus. În acest scop, înregistrarea comitetelor este inutilă fără posibilitatea de a anula modificările. Cu toate acestea, din moment ce Git are atât de multe componente, "anularea" poate lua multe înțelesuri diferite. De exemplu, puteți:

  • Anulați modificările din directorul de lucru
  • Anulați modificările din zona de așteptare
  • Anulați o comisie întreagă

Pentru a complica lucrurile chiar mai departe, există mai multe modalități de a anula o comitere. Puteți:

  1. Ștergeți pur și simplu comitetul din istoricul proiectului.
  2. Lăsați comiterea așa cum este, folosind un nou angajament pentru a anula modificările introduse de primul comitet.

Git are un instrument dedicat pentru fiecare dintre aceste situații. Să începem cu directorul de lucru.


Anularea în directorul de lucru

Perioada de timp imediat după salvarea unei copii sigure a unui proiect este unul de mare inovație. Împuternicit de cunoștințele pe care sunteți liberi să le faceți orice doriți fără a deteriora baza de cod, puteți experimenta conținutul inimii. Cu toate acestea, această experimentare lipsită de griji are adesea o întoarcere greșită și duce la un director de lucru cu o grămadă de cod în afara subiectului. Când ajungeți la acest punct, probabil veți dori să executați următoarele comenzi:

 git reset --hard HEAD git curat -f

Această configurație de git reset face ca directorul de lucru și stadiul să se potrivească cu fișierele din comitetul cel mai recent (numit și CAP), eliminând efectiv toate schimbările neangajate în pe șenile fișiere. A dispune de untracked fișiere, trebuie să utilizați git curat comanda. Git este foarte atent la eliminarea codului, deci trebuie să furnizați și -f opțiunea de a forța ștergerea acestor fișiere.


Resetarea tuturor modificărilor neangajate

Fișiere individuale

De asemenea, este posibil să vizați fișiere individuale. Următoarea comandă va face ca un singur fișier din directorul de lucru să se potrivească cu versiunea în cel mai recent comitet.

 git checkout HEAD 

Această comandă nu modifică deloc istoria proiectului, astfel încât să puteți înlocui în siguranță CAP cu un ID de comitet, o ramură sau o etichetă pentru a face fișierul să se potrivească cu versiunea în acel comitet. Dar, da nu încercați acest lucru cu git reset, ca atare voi schimbați istoricul (explicat în Anularea comitetelor).


Revenind la un fișier cu Git checkout

Anularea în zona de așteptare

În procesul de configurare a următorului dvs. comitet, ocazional adăugați un fișier suplimentar pe scenă. Următoarea invocare a git reset o va desfasura:

 git reset HEAD 

Omiterea --greu steagul spune Git să părăsească singur directorul de lucru (spre deosebire de git reset --hard HEAD, care resetează fiecare fișier din directorul de lucru și din stadiul de lucru). Versiunea etapată a fișierului se potrivește CAP, iar directorul de lucru păstrează versiunea modificată. Așa cum vă puteți aștepta, aceasta va duce la o modificare nestabilită în dvs. git status producție.


Deblocați un fișier cu git reset

Anularea comitetelor

Există două modalități de a anula o comitet folosind Git: Puteți oricare dintre acestea restabili aceasta prin simpla înlăturare din istoria proiectului sau puteți reveni aceasta prin generarea unui nou se angajează să scape de modificările introduse în original. Renunțarea la introducerea unei alte comitete poate părea excesivă, însă rescrierea istoricului prin eliminarea completă a comitetelor poate avea consecințe directe asupra fluxurilor de lucru ale mai multor utilizatori.

Resetarea

Ever-versatil git reset poate fi de asemenea folosit pentru a mișcare CAP referinţă.

 git reset HEAD ~ 1

HEAD ~ 1 parametrul de sintaxă specifică comiterea care are loc imediat înainte CAP (de asemenea, HEAD ~ 2 se referă la cel de-al doilea angajament anterior CAP). Prin deplasarea CAP trimiterea înapoi, eliminați în mod eficient cel mai recent angajament din istoricul proiectului.


In miscare CAP la HEAD ~ 1 cu git reset

Aceasta este o modalitate ușoară de a elimina câteva comitete care s-au derulat în afara subiectului, dar prezintă o problemă serioasă de colaborare. Dacă alți dezvoltatori ar fi început să se bazeze pe comitetul pe care l-am eliminat, cum s-ar sincroniza cu depozitul nostru? Ei ar trebui să ne ceară ID-ul pentru comitetul de înlocuire, să-l urmărim manual în depozit, să mutăm toate schimbările făcute la acel comitet, să rezolvăm conflictele de îmbinare și apoi să împărtășim schimbările "noi" cu toată lumea din nou. Imaginați-vă ce s-ar întâmpla într-un proiect open-source cu sute de contribuitori ...

Ideea este, nu resetați angajamentele publice, dar nu ezitați să ștergeți cele private pe care nu le-ați împărtășit nimănui. Vom revizui acest concept mai târziu în această sesiune.

Revenirea

Pentru a remedia problemele introduse prin resetarea angajamentelor publice, dezvoltatorii Git au creat un alt mod de a anula comitetele: revenirea. În loc să modifice comitetele existente, returnarea adaugă a nou comită care anulează problema:

 git revert 

Aceasta face modificările comitetului specificat, indică modul de anulare a acestora și creează o nouă comitere cu setul de modificări rezultat. Pentru Git și pentru alți utilizatori, comitetul de returnare arată și acționează ca orice alt angajament - se întâmplă doar să anulați modificările introduse de o comitet anterior.


Anularea unui comitet cu comiterea returnării

Aceasta este modalitatea ideală de a anula modificările care au fost deja angajate într-un depozit public.

modificarea

În plus față de anularea totală a comitetelor, puteți, de asemenea modifica cea mai recentă acțiune se realizează prin trecerea modificărilor ca de obicei, apoi execută:

 git commit - amend

Acest înlocuiește comiteza anterioară în loc să creați una nouă, ceea ce este foarte util dacă ați uitat să adăugați un fișier sau două. Pentru comoditatea dvs., editorul de comitete este însămânțat cu mesajul vechi al comitetului. Din nou, trebuie ai grija atunci când utilizați --modifica pavilion, deoarece rescrie istoria la fel ca git reset.


Modificarea celui mai recent angajament

Această lecție reprezintă un capitol din Git Succinct, o carte electronică gratuită de la echipa de la Syncfusion.

Cod