Uvod u Git Merge i Git Rebase: Što rade i kada ih koristiti

Kao programeri, mnogi od nas moraju birati između spajanja i baze podataka. Uz sve reference koje smo dobili s interneta, svi vjeruju da "Nemojte koristiti Rebase, to bi moglo uzrokovati ozbiljne probleme." Ovdje ću vam objasniti što su spajanje i ponovno postavljanje, zašto biste ih trebali (a ne biste trebali) koristiti i kako učiniti tako.

Git Merge i Git Rebase služe istoj svrsi. Osmišljeni su za integraciju promjena iz više grana u jednu. Iako je krajnji cilj isti, ove dvije metode postižu ga na različite načine, i korisno je znati razliku s vremenom kad postajete bolji programer softvera.

Ovo je pitanje podijelilo Git zajednicu. Neki vjeruju da biste uvijek trebali preusmjeravati, a drugi da biste se uvijek trebali spojiti. Svaka strana ima neke uvjerljive prednosti.

Git Merge

Spajanje je uobičajena praksa za programere koji koriste sustave za kontrolu verzija. Bilo da su grane stvorene za testiranje, ispravke programskih pogrešaka ili druge razloge, spajanjem počinju promjene na drugoj lokaciji. Da budemo precizniji, spajanjem se uzima sadržaj izvorne grane i integrira ih sa ciljanom granom. U tom se procesu mijenja samo ciljna grana. Povijest grane izvora ostaje ista.

Spoji glavni -> Podružnica značajki

prozodija

  • Jednostavno i poznato
  • Čuva kompletnu povijest i kronološki red
  • Održava kontekst podružnice

kontra

  • Povijest počinjenja može biti zagađena mnogim obvezama spajanja
  • Otklanjanje pogrešaka pomoću git bisect-a može postati teže

Kako to učiniti

Spajanje matične grane u granu značajki pomoću naredbi za naplatu i spajanje.

Značajka provjere $ git
$ git spajanje majstora
(ili)
$ git spajanje glavna značajka

To će stvoriti novi "objedinjavanje obveza" u grani značajki koja sadrži povijest obje grane.

Git Rebase

Rebase je još jedan način integriranja promjena iz jedne grane u drugu. Rebase komprimira sve promjene u jednu "zakrpu". Zatim integrira zakrpu na ciljnu granu.

Za razliku od spajanja, oslobađanje izravnava povijest jer dovršeni rad prenosi iz jedne grane u drugu. U tom se procesu nepotrebna povijest eliminira.

Sniženja su način na koji bi promjene trebale proći od vrha hijerarhije prema dolje, a spajanja su kako se vraćaju prema gore
Povezuje grana grane u master

prozodija

  • Pojednostavljuje potencijalno složenu povijest
  • Manipuliranje jedne obveze je jednostavno (npr. Njihovo vraćanje)
  • Izbjegava spajanje "buke" u zauzetim repoima sa zauzetim granama
  • Čisti posredničke obveze čineći ih jedinstvenim, što može biti korisno za DevOps timove

kontra

  • Smanjenje značajke na nekoliko prepisa može sakriti kontekst
  • Objavljivanje javnih skladišta može biti opasno ako radite kao tim
  • To je više posla: pomoću rebaza da se podružnica značajki uvijek ažurira
  • Oslobađanje s udaljenim granama zahtijeva da pritisnete. Najveći problem s kojim se ljudi suočavaju jest prisiljavanje na pritisak, ali nisu postavili zadani git push. To rezultira ažuriranjem svih grana koje imaju isti naziv, lokalno i udaljeno, i to je grozno rješavati.
Ako pogrešno povežete ponovo i nenamjerno prepisujete povijest, to može dovesti do ozbiljnih problema, pa budite sigurni da znate što radite!

Kako to učiniti

Ponovno postavljajte granu značajki na glavnu granu pomoću sljedećih naredbi.

Značajka provjere $ git
$ git rebase master

Ovo pomiče cijelu granu značajki na vrh glavne grane. To se događa ponovnim pisanjem povijesti projekta stvaranjem potpuno novih obveza za svako počinjenje u izvornoj (značajkoj) grani.

Interaktivno objavljivanje

To omogućuje promjenu stavki pri premještanju u novu podružnicu. Ovo je snažnije od automatiziranog ponovnog postavljanja, jer nudi potpunu kontrolu nad poviješću počinjanja podružnice. Obično se koristi za čišćenje neuredne povijesti prije spajanja grane značajki u master.

Značajka provjere $ git
$ git rebase -i master

Ovo će otvoriti uređivač tako što će navesti sve obveze koje će uskoro biti premještene.

odaberite 22d6d7c Poruka za br. 1
odaberite 44e8a9b Poruka za br. 2
odaberite 79f1d2h Poruka za br. 3

Ovo definira točno kako će grana izgledati nakon izvođenja ponovnog postavljanja. Ponovnom narudžbom entiteta možete napraviti povijest kao što god želite. Na primjer, možete koristiti naredbe kao što su popravak, skvoš, uređivanje itd. Umjesto odabira.

Koji koristiti

Pa što je najbolje? Što stručnjaci preporučuju?

Teško je generalizirati i odlučivati ​​o jednom ili drugom jer je svaki tim drugačiji. Ali moramo negdje započeti.

Timovi moraju uzeti u obzir nekoliko pitanja prilikom postavljanja Git rebase-a prema spajanju politika. Jer kao što se ispostavilo, jedna strategija tijeka rada nije bolja od druge. Ovisi o vašem timu.

Razmislite o razini popuštanja i Git sposobnosti u vašoj organizaciji. Odredite stupanj do kojeg ćete cijeniti jednostavnost oslobađanja u odnosu na sljedivost i povijest spajanja.

Konačno, odluke o spajanju i ponovnom oslobađanju treba razmotriti u kontekstu jasne strategije grananja (ovaj članak potražite u svrhu više razumijevanja strategije razgrananja). Uspješna strategija grananja osmišljena je oko organizacije vaših timova.

Što preporučujem?

Kako tim raste, s politikom uvijek spajanja uvijek će biti teško upravljati ili pratiti razvojne promjene. Da biste imali čistu i razumljivu povijest počinjenja, upotreba Rebase je razumna i učinkovita.

Uzimajući u obzir sljedeće okolnosti i smjernice, možete najbolje iskoristiti program Rebase:

  • Razvijate se lokalno: ako svoj rad niste podijelili ni s kim drugim. U ovom trenutku, radije prepustite ponovnom spajanju kako biste stajalište uredno uredili. Ako imate svoju osobnu vilicu skladišta i ona se ne dijeli s drugim programerima, sigurno ćete je ponovno napraviti nakon ponovnog ulaska u podružnicu.
  • Vaš je kôd spreman za pregled: stvorili ste zahtjev za povlačenjem. Drugi pregledavaju vaš rad i potencijalno ga dohvaćaju u svoje vilice radi lokalnog pregleda. U ovom trenutku ne biste trebali ponovno uspostavljati posao. Trebali biste stvoriti obveze "preraditi" i ažurirati granu značajki. To pomaže u sljedivosti zahtjeva za povlačenje i sprječava slučajno lomljenje povijesti.
  • Pregled je gotov i spreman za integraciju u ciljanu granu. Čestitamo! Izbrisati ćete granu svoje značajke. S obzirom da se drugi programeri od ovog trenutka neće uključiti u te promjene, ovo je vaša šansa da sanirate svoju povijest. U ovom trenutku možete prepisati povijest i prebaciti izvorne obveze, a one dosadne „pr rework“ i „spajanje“ obveze u mali skup usredotočenih obveza. Stvaranje eksplicitnog spajanja za ove obveze nije obavezno, ali ima vrijednost. Bilježi se kada je značajka diplomirala na masteru.

Zaključak

Nadam se da je ovo objašnjenje dalo neki uvid u Git spajanje i Git rebase. Strategija spajanja i ponovnog uspostavljanja uvijek je diskutabilna. Ali možda će vam ovaj članak pomoći da razriješite svoje sumnje i omogućiti vam da usvojite pristup koji djeluje za vaš tim.

Radujem se pisanju o Git tijekovima rada i konceptima Gita. Komentirajte teme o kojima želite sljedeće pisati. Živjeli!

code = kava + programer

Evo još jedne korisne reference

  • Kako usvojiti Git strategiju razgraničavanja

škola kodiranja za programere softvera