17. Eliminarea unei confirmări dintr-o ramură
Obiective
- Pentru a învăța să ștergeți ultimele confirmări ale sucursalei
Revert
este o comandă puternică a secțiunii anterioare care vă permite să anulați orice confirmări în depozit. Cu toate acestea, atât confirmările originale, cât și cele anulate sunt văzute în istoric a ramurii (când se utilizează comanda git log
).
Adesea, după ce a fost deja efectuată o comitere, ne dăm seama că a fost o greșeală. comanda de anulare care permite ștergerea imediată a comenzilor incorecte. Această comandă ar împiedica apariția uneia sau mai multor comiteri nedorite în istoricul git log
.
01 Comanda de resetare
Am folosit deja comanda reset
pentru a se potrivi cu zona tampon și comiterea selectată (comanda HEAD a fost utilizată în lecția anterioară).
Când este dată o referință de validare (de exemplu, o ramură, un hash sau un nume de etichetă), reset
va …
- Suprascrieți ramura curentă, astfel încât să indice comiterea corectă
- Opțional, resetați zona tampon, astfel încât să respecte conformitatea specificată
- Opțional, resetați directorul de lucru, astfel încât acesta să se potrivească cu validarea specificată
02 Verificați istoricul nostru
Permiteți-ne să scanăm rapid istoricul de validare .
Executare:
git hist
Rezultat:
Vedem că ultimele două confirmări din această ramură sunt „Oops „și” Reveniți la Hopa „. Să le eliminăm cu comanda reset
.
03 Marcați prima această ramură
Să marcăm ultima comitere cu tag, so you can find it after removing a commit(s).
Rulați:
git tag oops
04 Resetați comiterea la Oops anterioare
În istoricul de mai sus, comiterea etichetată „v1” este înainte de comiterea „Oops” și „Revine Oops”. Să resetăm ramura la acel punct. Deoarece ramura are o etichetă, putem folosi numele etichetei în comanda reset (dacă nu are o etichetă, putem utiliza valoarea hash).
Rulați:
git reset --hard v1git hist
Rezultat:
Filiala noastră principală arată spre commit v1, iar comitetele „Reveniți Hopa” și „Hopa” nu mai există în ramură. Parametrul --hard
face ca directorul de lucru să reflecte noul cap de ramură.
05 Nimic nu se pierde vreodată
Ce s-a întâmplat cu comiterile greșite? Sunt încă în depozit. De fapt, ne putem referi la ele. La începutul lecției, am creat eticheta „oops” pentru validarea anulată. Să aruncăm o privire asupra tuturor confirmărilor.
Rulați:
git hist --all
Rezultat:
Putem vedea că comiterile greșite nu au dispărut. Nu mai sunt listate în ramura principală, dar rămân în depozit. Ar fi în continuare în depozit dacă nu le-am eticheta, dar le-am putea referi doar după numele lor hash. Confirmările neriferențiate rămân în depozit până când software-ul de colectare a gunoiului este rulat de sistem.
06 Resetare pericole
Resetările de pe filialele locale sunt de obicei inofensive. Consecințele oricărui „accident” pot fi anulate utilizând validarea corectă.
Cu toate acestea, alți utilizatori care partajează sucursala pot fi confundați dacă sucursala este partajată în depozite la distanță.