Úvod do zlúčenia Git a Git Rebase: Čo robia a kedy ich používať

Ako vývojár si mnohí z nás musia vybrať medzi zlúčením a rebázou. So všetkými referenciami, ktoré získame z internetu, všetci veria, že „Nepoužívajte Rebase, mohlo by to spôsobiť vážne problémy.“ Tu vysvetlím, aké zlúčenia a rebase sú, prečo by ste ich mali (a nemali) používať a ako urobiť tak.

Git Merge a Git Rebase slúžia na rovnaký účel. Sú navrhnuté tak, aby integrovali zmeny z viacerých vetiev do jednej. Aj keď je konečný cieľ rovnaký, tieto dve metódy ho dosahujú rôznymi spôsobmi a je užitočné poznať rozdiel, keď sa stanete lepším vývojárom softvéru.

Táto otázka rozdelila komunitu Git. Niektorí veria, že by ste sa mali vždy obnoviť a iní by ste sa mali vždy spojiť. Každá strana má presvedčivé výhody.

Git Merge

Zlúčenie je bežná prax pre vývojárov používajúcich systémy na správu verzií. Či sa pobočky vytvárajú na testovanie, opravy chýb alebo z iných dôvodov, zlúčenie potvrdí zmeny na inom mieste. Presnejšie povedané, zlúčenie vezme obsah zdrojovej vetvy a integruje ich do cieľovej vetvy. V tomto procese sa zmení iba cieľová vetva. História zdrojovej vetvy zostáva rovnaká.

Zlúčiť predlohu -> vetva funkcie

Pros

  • Jednoduché a známe
  • Zachováva úplnú históriu a chronologické poradie
  • Zachováva kontext pobočky

Zápory

  • História záväzkov môže byť znečistená množstvom zlúčení
  • Ladenie pomocou git bisect môže byť ťažšie

Ako to spraviť

Spojte hlavnú vetvu s vetvou funkcie pomocou príkazov checkout a zlúčiť.

Funkcia pokladnice $ git
$ git zlúčiť majster
(Alebo)
Hlavná funkcia zlúčenia $ git

Tým sa vytvorí nový „Zlúčiť odovzdanie“ vo vetve prvkov, ktorá obsahuje históriu oboch vetiev.

Git Rebase

Rebase je ďalší spôsob, ako integrovať zmeny z jednej vetvy do druhej. Rebase skomprimuje všetky zmeny do jednej „záplaty“. Potom integruje záplatu do cieľovej vetvy.

Na rozdiel od zlúčenia, rebasing vyrovnáva históriu, pretože prevádza dokončené dielo z jednej vetvy do druhej. V tomto procese sa eliminuje nechcená história.

Zosilnenie je spôsob, akým by zmeny mali prechádzať z hornej časti hierarchie smerom nadol a zlúčenia spôsobujú, ako prúdia späť nahor
Rebase vetvy funkcie do hlavnej

Pros

  • Zjednodušuje potenciálne zložitú históriu
  • Manipulácia s jedným potvrdením je jednoduchá (napr. Vrátenie)
  • Vyhýba sa zlúčeniu spáchať „hluk“ v rušnom repozitári s rušnými pobočkami
  • Čistí priebežné potvrdenia tým, že z nich urobia jediný záväzok, čo môže byť užitočné pre tímy DevOps

Zápory

  • Kontext môže skryť rozdrvenie objektu až na niekoľko odovzdaní
  • Pri práci v tíme môže byť opätovné získanie verejných úložísk nebezpečné
  • Je to viac práce: pomocou rebázy udržujte svoju vetvu funkcií vždy aktualizovanú
  • Rebasing so vzdialenými vetvami vyžaduje, aby ste vynútili tlak. Najväčší problém, ktorému ľudia čelia, je vynútenie push, ale nenastavili git push default. To vedie k aktualizáciám všetkých pobočiek s rovnakým názvom na miestnej aj vzdialenej stránke, čo je veľmi náročné.
Ak odmietnete nesprávne a neúmyselne prepísať históriu, môže to viesť k vážnym problémom, takže sa uistite, že viete, čo robíte!

Ako to spraviť

Zmeňte vetvu objektu na hlavnú vetvu pomocou nasledujúcich príkazov.

Funkcia pokladnice $ git
$ git rebase master

Tým sa presunie celá vetva prvku na hornú časť hlavnej vetvy. Robí to tak, že prepisuje históriu projektu vytvorením úplne nových záväzkov pre každý záväzok v pôvodnej (funkčnej) vetve.

Interaktívne rebasovanie

Toto umožňuje zmeniť potvrdenia, keď sa presunú do novej vetvy. Je to výkonnejšia ako automatizovaná rebase, pretože ponúka úplnú kontrolu nad históriou potvrdenia zmien v pobočke. Zvyčajne sa používa na vyčistenie chaotickej histórie pred zlúčením vetvy funkcií do hlavnej.

Funkcia pokladnice $ git
$ git rebase -i majster

Editor sa otvorí tak, že uvedie všetky potvrdenia, ktoré sa majú presunúť.

vybrať 22d6d7c Potvrdiť správu # 1
vyberte 44e8a9b Potvrdiť správu # 2
vyberte 79f1d2h Potvrdiť správu # 3

Toto presne definuje, ako bude vetva vyzerať po vykonaní rebázy. Ak zmeníte poradie entít, história bude vyzerať tak, ako chcete. Namiesto toho môžete napríklad použiť príkazy, ako je oprava, stlačenie, úprava atď.

Ktorý použiť

Čo je najlepšie? Čo odborníci odporúčajú?

Je ťažké zovšeobecniť a rozhodnúť sa o jednom alebo druhom, pretože každý tím je iný. Ale musíme niekde začať.

Pri stanovovaní politiky Git rebase verzus zlúčenia musia tímy zvážiť niekoľko otázok. Pretože sa ukázalo, že jedna stratégia pracovného postupu nie je lepšia ako druhá. Závisí to od vášho tímu.

Zvážte úroveň rebasingu a kompetencie Git vo vašej organizácii. Určite mieru, do akej si vážite jednoduchosť rebasingu v porovnaní s vysledovateľnosťou a históriou zlúčenia.

Nakoniec by sa rozhodnutia o fúziách a rebasingu mali posudzovať v kontexte jasnej stratégie vetvenia (ďalšie informácie o stratégii vetvenia nájdete v tomto článku). Úspešná stratégia vetvenia je navrhnutá okolo organizácie vašich tímov.

Čo odporúčam?

Ako tím rastie, bude ťažké riadiť alebo sledovať vývojové zmeny pomocou vždy zlúčenej politiky. Ak chcete mať čistú a zrozumiteľnú históriu odovzdaní, použitie Rebase je rozumné a efektívne.

Zohľadnením nasledujúcich okolností a pokynov môžete z Rebase získať maximum:

  • Vyvíjate sa na miestnej úrovni: ak ste svoju prácu nezdieľali s nikým iným. V tomto bode by ste mali uprednostniť rebasing pred zlúčením, aby bola vaša história uklizená. Ak máte svoju osobnú vidlicu z úložiska a ktorá sa nezdieľa s ostatnými vývojármi, môžete ju bezpečne obnoviť aj potom, čo ste sa presťahovali do svojej pobočky.
  • Váš kód je pripravený na kontrolu: Vytvorili ste žiadosť o stiahnutie. Iní kontrolujú vašu prácu a potenciálne ju sťahujú do svojej vidlice, aby ju mohli skontrolovať na miestnej úrovni. V tomto okamihu by ste svoju prácu nemali znovu oživovať. Mali by ste vytvoriť „prepracované“ potvrdenia a aktualizovať vetvu svojej funkcie. Pomáha to so sledovateľnosťou v žiadosti o ťah a zabraňuje náhodnému zlomeniu histórie.
  • Kontrola je hotová a pripravená na integráciu do cieľovej vetvy. Blahoželáme! Chystáte sa odstrániť vetvu svojej funkcie. Vzhľadom na to, že od tohto bodu sa iní vývojári nebudú odteraz zaoberať týmito zmenami, máte šancu dezinfikovať svoju históriu. V tomto okamihu môžete prepísať históriu a zložiť pôvodné potvrdenia a tie otravné „prepracované“ a „zlúčiť“ potvrdenia do malej skupiny cielených potvrdení. Vytvorenie explicitného zlúčenia pre tieto potvrdenia je voliteľné, ale má hodnotu. Zaznamenáva sa, keď sa prvok prepracoval na zvládnutie.

záver

Dúfam, že toto vysvetlenie poskytlo určité informácie o zlúčení Git a Git rebase. Stratégia zlúčenia verzus rebase je vždy diskutabilná. Ale možno tento článok pomôže rozptýliť vaše pochybnosti a umožní vám prijať prístup, ktorý pracuje pre váš tím.

Teším sa na písanie pracovných postupov a konceptov Git. Komentujte témy, o ktorých chcete písať ďalej. Na zdravie!

code = káva + vývojár

Tu je ďalší užitočný odkaz

  • Ako prijať vetviacu stratégiu Git

kódovacia škola pre vývojárov softvéru