Git je distribuirani sustav kontrole verzija - alat za praćenje promjena napravljenih u skupu datoteka ili koordiniranje rada tijekom vremena. Programeri ga često koriste za koordiniranje promjena izvornog koda softvera i to najboljeg dijela; može se koristiti za praćenje bilo koje vrste sadržaja uopće. Posebno je dizajniran da maksimalno brzi i efikasno podnosi sve, od malih do velikih količina projekata. Izuzetno je fleksibilno što pojedinci mogu izravno dijeliti posao između svojih osobnih spremišta, a grupe mogu koordinirati svoj tijek rada kroz središnje spremište. Jednostavno omogućuje dvojici programera koji sjede na dvije različite lokacije da samostalno prave i bilježe promjene, a sve to bez centralnog spremišta.
Spajanje je uobičajena praksa u Gitu koja se koristi za integriranje promjena iz jedne grane u drugu. Git spajanje je naredba koja vrši promjene na drugoj lokaciji. Programerima omogućuje uzimanje neovisnih linija koda koje je stvorila podružnica Git i integriranje ih u jednu granu. Ovo samo mijenja ciljnu granu dok povijest izvorne grane ostaje. Git rebase je još jedna naredba koja se u osnovi koristi za istu svrhu, osim što to čini sasvim drugačije. Oboje čine isto - uključuju obveze iz jedne grane u drugu - ali razlika leži u tome kako to rade. Izdvajamo nekoliko ključnih razlika između njih.
Git merge je naredba koja objedinjuje dvije ili više grana povijesti počinjenja. Spajanje često objedinjuje samo dvije grane, iako Git podržava spajanje tri, četiri ili više grana istovremeno. Git spajanje koristi Git pull za uključivanje promjena iz jedne grane u drugu ili iz drugog spremišta u cjelini. Spajanje se mora dogoditi u jednom skladištu, što znači da sve grane koje je potrebno spajati moraju biti prisutne u istom spremištu. Situacije spajanja obično proizlaze iz dva ili više korisnika koji pokušavaju ažurirati zajednički kôd. Korisnik najčešće spaja podružnicu u drugu granu u svom lokalnom spremištu u lokalnom okruženju. Git spajanje posebno integrira sadržaj izvorne grane s ciljanom granom. Ciljna grana se mijenja, dok izvorna grana ostaje.
Git rebase je još jedna alternativa spajanju koja se koristi za integraciju druge grane s podružnicom u kojoj trenutno radite, osim što čuva linearnu povijest obveza. Svrha Git rebase je premjestiti podružnicu s jedne lokacije na drugu. Kako su obredi nepromjenjivi, ne mogu se premjestiti, pa to podrazumijeva stvaranje novih obveza s istim skupovima promjena i metapodataka. Rebaza u osnovi mijenja pojam kada i gdje je razvijen slijed postupaka, što rezultira gubitkom nekih aspekata povijesti razvoja. To znači da će se originalna obveza na kojoj se razvoj temeljio izvorno promijeniti. Učinkovito uključuje sve nove obveze u matičnoj branši prepisivanjem povijesti. Kao rezultat toga, stvara nove obveze za svaki čin u izvornoj grani.
- Iako su i spajanje i ponovno spajanje najčešći načini integriranja promjena u Git i služe istoj svrsi - kombinirati više grana u jednu - razlika leži u načinu na koji ih postižu. Git spajanje integrira sadržaj izvorne grane s ciljanom granom, uz očuvanje predaka svake povijesti obveza, dok Git rebase uključuje sve nove obveze u glavnoj grani prepisivanjem povijesti stvaranjem novih obveza za svaku naredbu u grani izvora.
- Pomoću Git spajanja prvo se prebacite na granu koja se spaja, a zatim pomoću naredbe spajanja odaberite granu koja će se spojiti. S obzirom na to da grana ukazuje na čin i da je počinjenje granularnost s kojom povezujete promjene, spajanje naredba se spaja na razini podružnice ili počiniti. Rebase je, s druge strane, malo drugačiji. Najprije odaberete granu za ponovno postavljanje, a zatim upotrijebite naredbu za ponovno postavljanje da biste odabrali mjesto gdje trebate staviti.
- Spajanjem nastaje nova obveza koja predstavlja spajanje dvije grane. Ona integrira promjene iz različitih paralelnih linija razvoja (grana) zajedno stvaranjem obveza spajanja. Namjena je spojiti dvije ili više grana zajedno, uključujući sve promjene od trenutka odstupanja u trenutnoj grani. Brzo naprijed je zadano ponašanje spajanja u Gitu. Oslobađanje, s druge strane, mijenja pojedinačne obveze prepisivanjem povijesti projekata stvarajući nove obveze za svaku odredbu u izvornoj grani, što zauzvrat rezultira linearnom poviješću bez ikakvih odvojenih grana.
- Git spajanje ne mijenja povijest, ali očuvanje konteksta grane što znači da se postojeće grane ne mijenjaju ni na koji način. Stvara novu obvezu (osim ako nije bila brzinsko spajanje), ali obveze ostaju dostupne od strane grane. Git rebase, s druge strane, pojednostavljuje potencijalno složenu povijest. Dijelovi se prepisuju, stare verzije se zaboravljaju i DAG izmjena se mijenja. Članci se više ne mogu dosegnuti s ponovnim bazama što znači da više ne možete ponovno postavljati objavljene podružnice.
Ukratko, spajanje i ponovno postavljanje su dva načina integriranja promjena u Gitu, ali oni se razlikuju u načinu na koji to rade. Spajanje je operacija u jednom koraku s jednim mjestom za rješavanje sukoba, a obveze koje su dostupne iz branše ostaju dostupne. Rebase, s druge strane, ponovo izvršava svaku obavezu pojedinačno prepisivanjem povijesti stvaranjem novih obveza za svaku naredbu u grani izvora. Dakle, ono što je nekada bilo dostižno više nije dostižno. Rebaza u osnovi mijenja pojam kada i gdje je razvijen slijed djela.