af Vali Shah

Som en Udvikler, mange af os er nødt til at vælge mellem Fusionere og Rebase. Med alle de referencer, vi får fra internettet, mener alle “brug ikke Rebase, det kan forårsage alvorlige problemer.”Her vil jeg forklare, hvad fusion og rebase er, hvorfor du skal (og ikke bør) bruge dem, og hvordan du gør det.

Git Merge og Git Rebase tjener det samme formål. De er designet til at integrere ændringer fra flere grene til en., Selvom det endelige mål er det samme, opnår disse to metoder det på forskellige måder, og det er nyttigt at kende forskellen, når du bliver en bedre soft .areudvikler.

dette spørgsmål har delt Git-samfundet. Nogle mener, at du altid bør rebase og andre, at du altid bør fusionere. Hver side har nogle overbevisende fordele.

Git Merge

fletning er en almindelig praksis for udviklere, der bruger versionsstyringssystemer. Uanset om grene er oprettet til test, fejlrettelser eller andre grunde, sammenlægning begår ændringer til et andet sted., For at være mere specifik tager sammenlægning indholdet af en kildegren og integrerer dem med en målgren. I denne proces ændres kun målgrenen. Kildegrenens historie forbliver den samme.,da2a4595a”>

Flet Master -> Funktion filial

Fordele

  • Enkle og velkendte
  • Bevarer komplet historie og kronologiske rækkefølge
  • Opretholder forbindelse med den gren

Ulemper

  • Begå historie kan blive forurenet med masser af flet begår
  • Fejlfinding ved hjælp af git bisect kan blive sværere

Hvordan du gør det

Flet master gren i den funktion, filial ved brug af checkout og merge kommandoer.,

$ git checkout feature$ git merge master(or)$ git merge master feature

Dette vil skabe en ny “Merge commit” i funktionen gren, der holder historien om begge grene.

Git Rebase

Rebase er en anden måde at integrere ændringer fra en gren til en anden. Rebase komprimerer alle ændringerne i en enkelt “patch.”Derefter integrerer det plasteret på målgrenen.

i modsætning til sammenlægning flader rebasing historien, fordi den overfører det færdige arbejde fra en gren til en anden. I processen elimineres uønsket historie.,

Rebases er, hvordan ændringer skal gå fra toppen af hierarkiet nedad, og fusionerer er, hvordan de flyder opad igen

Rebase har filial i master

Fordele

  • Strømliner et potentielt komplekse historie
  • Manipulere en enkelt begå, er let (fx, fortrydelse af dem)
  • Undgår at fusionere begå “støj” i travle genkøbsforretninger med travle grene
  • Renser mellemliggende begår ved at gøre dem en enkelt begå der kan være nyttige for DevOps hold

Ulemper

  • Kvaser den funktion ned til en håndfuld begår kan skjule den sammenhæng
  • Rebasing offentlige arkiver kan være farligt, når man arbejder som et team
  • Det er mere arbejde: Brug rebase at holde din funktion filial altid opdateret
  • Rebasing med eksterne afdelinger kræver, at du force push., Det største problem, folk står overfor, er, at de tvinger skub, men har ikke indstillet git push-standard. Dette resulterer i opdateringer til alle filialer med samme navn, både lokalt og eksternt, og det er forfærdeligt at håndtere.

Hvis du rebase forkert og utilsigtet omskrive historien, kan det føre til alvorlige problemer, så sørg for at du ved, hvad du gør!

Sådan gør du

Rebase funktionen gren på master gren ved hjælp af følgende kommandoer.,

$ git checkout feature$ git rebase master

dette flytter hele funktionen gren på toppen af master gren. Det gør det ved at omskrive projektets historie ved at skabe helt nye commits for hver commit i den oprindelige (feature) gren.

interaktiv Rebasing

Dette gør det muligt at ændre commits, når de flyttes til den nye filial. Dette er mere kraftfuldt end automatiseret rebase, da det giver fuld kontrol over filialens commit-historie. Typisk bruges dette til at rydde op i en rodet historie, før du fusionerer en funktionsgren til master.,

$ git checkout feature$ git rebase -i master

Dette åbner editoren ved at angive alle de forpligtelser, der er ved at blive flyttet.

pick 22d6d7c Commit message#1pick 44e8a9b Commit message#2pick 79f1d2h Commit message#3

dette definerer nøjagtigt, hvordan grenen vil se ud, efter at rebasen er udført. Ved at genbestille enhederne kan du få historien til at se ud som hvad du vil. For eksempel, du kan bruge kommandoer som f.eks. fixup squash edit osv, i stedet for pick.

hvilken skal du bruge

så hvad er bedst?, Hvad anbefaler eksperterne?

det er svært at generalisere og beslutte det ene eller det andet, da hvert hold er anderledes. Men vi er nødt til at starte et sted.

hold skal overveje flere spørgsmål, når de indstiller deres Git rebase vs. merge politikker. For som det viser sig, er en workorkflo. – strategi ikke bedre end den anden. Det er afhængigt af dit team.

overvej niveauet for rebasing og Git-kompetence på tværs af din organisation. Bestem, i hvilken grad du værdsætter enkelheden ved at rebasere i forhold til sporbarheden og historien om sammenlægning.,

Endelig bør beslutninger om sammenlægning og rebasing overvejes i forbindelse med en klar forgreningsstrategi (se denne artikel for at forstå mere om forgreningsstrategi). En vellykket forgreningsstrategi er designet omkring organisationen af dine teams.

Hvad anbefaler jeg?

Når teamet vokser, bliver det svært at styre eller spore udviklingsændringer med en altid fusionspolitik. For at have en ren og forståelig commit-historie er brug af Rebase rimelig og effektiv.,

Ved at overveje følgende omstændigheder og retningslinjer kan du få det bedste ud af Rebase:

  • du udvikler lokalt: hvis du ikke har delt dit arbejde med nogen anden. På dette tidspunkt bør du foretrække at rebasere frem for at slå sammen for at holde din historie ryddig. Hvis du har din personlige fork af lageret, og det ikke deles med andre udviklere, er du sikker på at rebase, selv efter at du har skubbet til din filial.
  • din kode er klar til gennemgang: du oprettede en pull-anmodning. Andre gennemgår dit arbejde og henter det potentielt i deres gaffel til lokal gennemgang., På dette tidspunkt bør du ikke rebase dit arbejde. Du skal oprette’ re .ork ‘ commits og opdatere din funktion gren. Dette hjælper med sporbarhed i pull anmodning og forhindrer utilsigtet historie brud.
  • gennemgangen er færdig og klar til at blive integreret i målgrenen. Tillykke! Du er ved at slette din funktionsgren. I betragtning af at andre udviklere ikke vil blive fetch-sammenlægning i disse ændringer fra dette tidspunkt, er dette din chance for at desinficere din historie., På dette tidspunkt kan du omskrive historien og folde de originale forpligtelser og de irriterende ‘pr-omarbejdning’ og ‘fusionere’ forpligtelser i et lille sæt fokuserede forpligtelser. Oprettelse af en eksplicit Fusion for disse forpligtelser er valgfrit, men har værdi. Den registrerer, når funktionen er uddannet til master.

konklusion

Jeg håber, at denne forklaring har givet nogle indsigter om Git merge og Git rebase. Flet vs rebase strategi er altid diskutabel. Men måske vil denne artikel hjælpe med at fjerne dine tvivl og give dig mulighed for at vedtage en tilgang, der fungerer for dit team.