Cum cu Git: Anulați comiterea
Uneori s-ar putea să comite modificări în depozitul tău Git, dar apoi să realizezi că ai făcut o greșeală. Acum doriți să anulați aceste comitări pentru ca codul să funcționeze din nou.
În acest ghid, ne vom uita la comanda git reset pentru comiterea locală și la distanță într-un depozit.
Diferența dintre un git reset și git revert
Este important să înțelegeți diferența dintre resetarea și revenirea comitărilor atunci când utilizați Git.
- Comanda git reset anulează comiterile prin eliminarea comiterilor anterioare din depozit și resetarea Git HEAD la o comitere anterioară. O parte din istoricul Git se poate pierde făcând acest lucru, în funcție de opțiunea folosită.
- Comanda git revert anulează comiterile prin crearea unui nou commit care reprezintă o stare anterioară a depozitului. Niciun istoric Git nu se va pierde făcând acest lucru.
Ați introdus deja modificări și altcineva a retras acele modificări? Nu ar trebui să utilizați git reset pentru a anula modificările, ar trebui să utilizați git revert așa cum este descris în ghidul nostru de comitere Git rollback.
Folosind comanda git reset pentru a anula o comitere
Pentru următoarele exemple, presupunem că arborele nostru Git local arată astfel:
X | ABC
X reprezintă modificarea noastră locală, neangajată, a Git HEAD, indicată de C .
Pentru a anula comiterea numită „ C ” din cauza unei greșeli, putem rula o comandă git reset .
În funcție de nevoile de urmărire a fișierelor, veți dori să utilizați comanda git reset cu diferite steaguri.
Cazul 1: Folosiți git reset și eliminați fișierele din zona de staging
Putem folosi comanda git reflog pentru a vedea istoricul nostru Git.
Putem folosi git ls-files pentru a vedea fișierele aflate în stadiul actual pentru proiectul nostru:
$ Git reflog f326d13 [email protected] {0}: commit: adăugat C 358d535 [email protected] {1}: commit: adăugat B 00b61d5 [email protected] {2}: commit (inițial): adăugat A $ Git ls-fișiere ABCX
Pentru a păstra fișierele urmărite de la comiterea C , dar pentru a le elimina din indexul Git, puteți rula:
Git reset HEAD~1
Puteți folosi prescurtarea Git a HEAD~1 pentru a elimina commit-ul înainte de HEAD.
Dacă ați folosit HEAD~5 , aceasta ar elimina commit-ul care este cinci comit-uri înainte de HEAD.
Modificări ale indexului Git, numită și „zona de pregătire”, se va pierde, astfel încât arborele Git ar fi acum:
X | AB
Pe care îl putem confirma cu aceste comenzi:
$ Git reflog 358d535 [email protected] {0}: resetare: mutare la HEAD~1 f326d13 [email protected] {1}: commit: adăugat C 358d535 [email protected] {2}: commit: adăugat B 00b61d5 [email protected] {3}: commit (inițial): Adăugat A $ Git ls-fișiere AB $ Git status Pe branșa master Fișiere neurmărite: (utilizați „Git add…” pentru a include în ceea ce va fi comis) CX
Când folosim doar git reset fără marcaje, nu eliminăm niciun fișier; sunt pur și simplu neînscenate:
$ ls ABCX
Cu toate acestea, ajungeți să eliminați intrarea de jurnal pentru commit-ul pe care l-ați resetat:
$ Git Log Commit 358D535BC5E06730E61D272BE34A6D0E568F42AF AUTOR: Data utilizatorului: Tue 10 februarie 13:54:55 2015 -0500 Adăugat b Commit 00B61D53FE06EE672FA0497B175FB7BD89E26B72
Cazul 2: Folosiți git reset –soft și Păstrați modificările la fișiere
Dacă utilizați indicatorul –soft , orice modificări aduse fișierelor urmărite și indexului Git sunt păstrate:
Resetare Git – soft HEAD~1
Orice fișiere care au fost montate rămân așa și niciun fișier nu este eliminat fizic:
$ Git ls-files ABCX $ ls ABCX $ Status Git Pe branșa master Modificări care urmează să fie comise: (utilizați „Git reset HEAD …” pentru a anula etapa) fișier nou: C fișier nou: X
Folosind steag- ul –soft , veți ajunge în continuare prin a elimina intrarea de jurnal pentru commit-ul pe care îl resetați.
Cazul 2: Folosiți git reset –hard și eliminați toate modificările la fișiere
Dacă utilizați indicatorul –hard , orice modificări aduse fișierelor urmărite și indexului Git se pierd:
$ Git reset –hard HEAD~1 HEAD este acum la 3bf1b55 Adăugat B
Toate fișierele după comiterea la care ați resetat sunt neînscenate și eliminate fizic:
$ Git ls-files AB $ ls AB $ Stare Git Pe branșa master nimic de comis, directorul de lucru curat
Eliminați din nou intrarea din jurnalul Git pentru commit-ul pe care l-ați resetat.
Încercați să utilizați git revert când commit-urile sunt deja împinse
După cum sa menționat mai sus, dacă ați introdus deja modificările și altcineva a introdus acele modificări, nu ar trebui să utilizați git reset pentru a anula modificările, folosiți git revert .
Cu toate acestea, dacă doriți cu adevărat, puteți aplica aceiași pași ca în secțiunea anterioară pentru a șterge unele comite-uri Git anterioare.
După aceea, puteți face un git push -f pentru a utiliza opțiunea de forță. Din nou, acest lucru nu este recomandat, deoarece poate crea conflicte grave între diferitele stări ale depozitului altor utilizatori Git.
Dezvăluirea agentului de publicitate
Gazduirweb este o resursă online gratuită care oferă utilizatorilor conținut valoros și servicii de comparare. Pentru a menține această resursă 100% gratuită, primim compensații de la multe dintre ofertele afișate pe site. Alături de factorii cheie de revizuire, această compensație poate afecta modul în care și locul în care apar produsele pe site (inclusiv, de exemplu, ordinea în care apar). Gazduirweb nu include întregul univers al ofertelor disponibile. Opiniile editoriale exprimate pe site sunt strict ale noastre și nu sunt furnizate, susținute sau aprobate de agenții de publicitate.
Politica noastră de revizuire editorială
Site-ul nostru se angajează să publice conținut independent, precis, ghidat de reguli editoriale stricte. Înainte ca articolele și recenziile să fie publicate pe site-ul nostru, acestea sunt supuse unui proces amănunțit de revizuire efectuat de o echipă de editori independenți și experți în materie pentru a asigura acuratețea, actualitatea și imparțialitatea conținutului. Echipa noastră editorială este separată și independentă de agenții de publicitate ai site-ului nostru, iar opiniile pe care le exprimă pe site-ul nostru sunt proprii. Pentru a citi mai multe despre membrii echipei noastre și despre mediul lor editorial, vă rugăm să vizitați pagina Despre a site-ului nostru.
Leave a Reply