Î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:
Pentru a complica lucrurile chiar mai departe, există mai multe modalități de a anula o comitere. Puteți:
Git are un instrument dedicat pentru fiecare dintre aceste situații. Să începem cu 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.
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).
Git checkout
Î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.
git reset
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.
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.
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.
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.
Aceasta este modalitatea ideală de a anula modificările care au fost deja angajate într-un depozit public.
Î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
.
Această lecție reprezintă un capitol din Git Succinct, o carte electronică gratuită de la echipa de la Syncfusion.