Brisanje obveza u Gitu je nešto što možete činiti češće nego što biste očekivali. S tako uobičajenim zadatkom, vjerojatno bi vam dobro došao kratki vodič.

Ovaj članak odgovara kako izbrisati Git commit i druga moguća rješenja koja možete isprobati. Dakle, ako pogriješite u svom posljednjem predanju ili želite očistiti svoju repo povijest, čitajte dalje da biste saznali.
Brisanje predaje u Gitu
Obavezu u Gitu možete izbrisati na nekoliko načina. Ako ne želite ili ne možete promijeniti Git commit poruku , tada je najčešće rješenje korištenje naredbi “git reset” i “git revert”.
Da biste koristili "git reset", učinite ovo:
- Pronađite obvezu koju želite izbrisati pomoću git log .

- Upotrijebite git reset –soft [commit hash] za poništavanje naredbe izvršenja bez "nukiranja" bilo čega.

- Ili upotrijebite git reset –hard [commit hash] za vraćanje na commit prije onog koji želite izbrisati.

- Zamijenite “[commit hash]” s hashom izvršenja koje ciljate.
Alternativno, također možete koristiti “git rebase -i HEAD~[Number]” za ponovno baziranje posljednjeg broja obveza. Zamijenite [number] s brojem obveza. Git će vam pokazati datoteku koju možete urediti i ukloniti obvezu za koju želite da nestane. Učinite ovo samo ako već niste gurnuli commit.
Ovo je naizgled jednostavna metoda, ali budite oprezni. Trajno uklanja sve promjene u obvezama nakon one na koju ste je vratili, stoga budite sigurni da je to upravo ono što želite.
Alternativno, možete koristiti "git revert" ovako:
- Ako želite zadržati promjene u svom radnom direktoriju, koristite git revert [commit hash] . Ova naredba stvara novu predaju koja poništava promjene iz obveze koju navedete.

- Nakon vraćanja, gurnite promjene u udaljeni repozitorij pomoću git push .

Evo još jedne alternative, u slučaju da želite izbrisati višestruke, specifične obveze:
- Upotrijebite git checkout [last commit hash] da provjerite zadnji commit koji bi trebao ostati.

- Napravite novu granu s git checkout -b repair .

- Pokrenite git cherry-pick [određeni hash komitiranja] na prvom komitu koji želite sačuvati.

- Ponovite za ostale obveze koje želite sačuvati.
- Pokrenite git checkout master do checkout mastera.

- Resetiraj master na posljednje upotrebljivo uvrštavanje pomoću git reset –hard [hash posljednjeg uvrštavanja] .

- Spojite novu granu za master s git merge repair .

- Zatim pokrenite git push -f origin master da biste poslali na daljinski upravljač.

Kada biste trebali izbrisati obveze
Postoji nekoliko situacija kada je uklanjanje obveza najbolja stvar za učiniti. Ovo su neki od njih.
Loš kod
Jedan od najčešćih razloga zašto biste se htjeli riješiti obvezivanja je taj što ga kod u njemu jednostavno ne reže. Možda ste pogriješili i želite krenuti ispočetka, ili ste možda shvatili da rezultat ne odgovara onome što pokušavate postići. Na primjer, možda ste dodali funkciju koja je u sukobu s drugim dijelom vašeg koda. Brisanje ove predaje omogućuje vam da se vratite, popravite problem i zatim ponovno izvršite ispravljenu verziju.
Ako ste upravo izvršili dio koda i zatim uočili upadljivu pogrešku, kao što je bug ili dio koda koji nije trebao biti tamo, ali nemate vremena to popraviti – to je dobar razlog za brisanje obveze. Umjesto da dopustite da ovaj nepotrebni ili manjkavi dio koda ostane u povijesti vašeg projekta (i potencijalno izazove zabunu ili čak katastrofalne pogreške u ispravljanju grešaka), možete izbrisati tu predaju. Na taj način vaš projekt ostaje čist.
Osjetljivi podaci
Slučajno unošenje osjetljivih podataka događa se češće nego što mislite. Ne iznenađuje da to može predstavljati značajan sigurnosni rizik, bilo osobni ili korporativni. Sve, od lozinki i API ključeva do osobnih podataka, moglo bi krišom završiti u vašem predanju. A kada se jednom pojavi u prostoru projekta, svatko mu može pristupiti i potencijalno probiti vašu ili sigurnost vašeg tima.
Ove nesreće su možda čak i bolji razlozi za brisanje predaje nego puki loš kod. Možete urediti neispravan kod i ne brinuti se hoće li on ostati u povijesti projekta, ali to nije rizik koji biste željeli preuzeti s osjetljivim podacima. Na primjer, ako slučajno predate datoteku koja sadrži API ključeve, uklanjanje ovog predanja sprječava da ovaj ključ padne u pogrešne ruke.
Čuvanje povijesti čistom
Još jedan čvrst razlog za brisanje Git predaje je održavanje povijesti projekta čistom i jednostavnom. Kako radite na projektu, vaša povijest predaje postaje sve pretrpana manjim ažuriranjima, eksperimentima ili promjenama koje više nisu relevantne. Kada želite pregledavati povijest iz bilo kojeg razloga, kao što je otkrivanje zašto ste napravili određenu promjenu ili vraćanje u stabilno stanje nakon eksperimenta, pretrpana povijest može postati problem.
Brisanjem nepotrebnih obaveza, svoju povijest projekta održavate urednom i lakom za praćenje vama i drugima u vašem timu. To je još korisnije prije spajanja grana tako da možete predstaviti jasnu, sažetu i relevantnu povijest onome tko pregledava vaš kod. Na primjer, ako imate nekoliko obveza koje su bile samo manje izmjene značajke, možda biste ih željeli zgnječiti u jednu predaju kako bi vaša povijest bila uredna.
Najbolji primjeri iz prakse i savjeti
Prije nego izbrišete obvezu, slijedite neke najbolje prakse kako biste održali svoj projekt funkcionalnim i izbjegli neželjene posljedice.
Sigurnosno kopirajte svoj rad
Prije nego što izbrišete bilo koju predaju u Gitu, dobra je ideja napraviti sigurnosnu kopiju svog rada, čak i ako mislite da je bezvrijedno zadržati. Možda se čini kao dodatni posao, ali sigurnosna kopija je sigurnosna mreža u slučaju da stvari ne idu po planu.
Možete stvoriti sigurnosnu kopiju tako da napravite novu granu koja odražava trenutno stanje vašeg repozitorija. Na primjer, prije brisanja obveze koja je uvela novu značajku, stvorite rezervnu granu "feature-backup". To će vam dati slobodu eksperimentiranja i brisanja obveza bez straha od gubitka važnog posla. Dakle, ako kasnije shvatite da trebate nešto iz obrisanog upisa, niste to zauvijek izgubili. Ako odlučite da vam ta sigurnosna kopija više nije potrebna, možete izbrisati Git granu .
Nemojte brisati javne obveze
Kada radite s javnim spremištima, posebno u projektima otvorenog koda ili timskim okruženjima, trebali biste biti posebno oprezni s brisanjem obaveza. Nakon što se obveza gurne u javno spremište i drugi su je povukli, brisanje te obveze može zbuniti ili omesti sve uključene i poremetiti rad. To je oblik izvlačenja tepiha ispod nekoga – nije ugodno iskustvo, već prilično bezobzirno. Ako morate izbrisati obvezu koja je već javna, unaprijed obavijestite svoj tim ili suradnike na projektu kako bi znali što se događa. Na taj način svi su svjesni i mogu prilagoditi svoj rad prema tome.
Koristite Vrati za javna spremišta
Ako i dalje želite poništiti promjene u javnom repozitoriju, umjesto trajnog brisanja obveze, možete poništiti spajanje u Gitu . Za razliku od git reset-a, koji učinkovito prepisuje povijest, "git revert" stvara novi commit koji poništava promjene napravljene u prethodnom commit-u.
Stoga je korištenje ove naredbe mnogo sigurnije i transparentnije, posebno kada radite s drugima. Otvoreno govorite članovima svog tima da ste možda pogriješili i uzvraćate obvezu da ćete to popraviti. Ako ste gurnuli commit sa značajnim bugom, "git revert" vam omogućuje da brzo poništite učinke tog buga, dok povijest projekta ostaje netaknuta. Time se održava cjelovitost povijesti projekta i održava svačije lokalno spremište u skladu s daljinskim.
Još jednom provjerite prije brisanja
Jedan od najvećih rizika pri brisanju obveza u Gitu je gubitak vremena i truda koje ste uložili u tu predaju. Da biste to spriječili, pregledajte sve promjene u svakom uređivanju koje želite ukloniti. Upotrijebite “git log ili git show [commit hash]” za pregled predaja. Ako uklanjate obvezu koja je dodala nekoliko funkcija vašem kodu, provjerite jesu li vašem projektu potrebne te funkcije za rad ili da su replicirane negdje drugdje.
Posvećenost tome
Postoji mnogo razloga za brisanje obvezivanja na Gitu, poput održavanja vaše povijesti urednom, poništavanja zbunjujućih pogrešaka ili čuvanja vaših osjetljivih informacija od znatiželjnih očiju. Bez obzira na razlog, zapamtite da postoje dva načina da to učinite – "git reset" i "git revert", od kojih svaki služi različitoj svrsi, pa odaberite onaj koji je pravi za vaš projekt. Također možete preimenovati Git granu radi dodatne jasnoće.
Jeste li ikada morali brisati commit u Gitu? Kakvo je vaše iskustvo i imate li kakve savjete za podijeliti? Ostavite komentar ispod i nastavite razgovor.