ved Gyldig Shah
Som en Utvikler, mange av oss har til å velge mellom å slå sammen og Rebase. Med alle henvisningene vi får fra internett, alle mener «ikke bruk Rebase, det kan føre til alvorlige problemer.»Her vil jeg forklare hva fusjonere og rebase er, hvorfor du bør (og ikke bør) bruke dem, og hvordan det skal gjøres.
Git slå sammen og Git Rebase tjene det samme formål. De er utformet for å integrere endringer fra flere avdelinger i ett., Selv om det endelige målet er det samme, de to metoder for å oppnå det på forskjellige måter, og det er nyttig å vite forskjellen som du blir en bedre utvikler programvare.
Dette spørsmålet har splittet Git samfunnet. Noen mener at du alltid skal rebase og andre at du alltid skal fusjonere. Hver side har noen overbevisende fordeler.
Git Merge
Sammenslåing er en vanlig praksis for utviklere som bruker versjonen kontroll systemer. Om filialer som er opprettet for testing, feilrettinger, eller andre grunner, sammenslåing begår endringer til et annet sted., For å være mer spesifikk, sammenslåing tar innholdet i en kilde gren og integrerer dem med et mål gren. I denne prosessen, bare målet gren er endret. Kilde gren historie forblir den samme.,da2a4595a»>
Proffene
- Enkel og kjent
- Bevarer komplett historie og kronologisk rekkefølge
- Opprettholder sammenheng for avdelingen
Ulemper
- Begå historie kan bli forurenset av mange fusjonere begår
- Feilsøking ved hjelp av
git bisect
kan bli vanskeligere
Hvordan du gjør det
Merge master branch i branch har ved hjelp av checkout
og merge
kommandoer.,
$ git checkout feature$ git merge master(or)$ git merge master feature
Dette vil skape en ny «Merge har begått» i funksjonen gren som har historie i begge grener.
Git Rebase
Rebase er en annen måte å integrere forandringer fra en gren til en annen. Rebase komprimerer alle endringer i en enkelt «patch.»Så det integrerer patch på målet gren.
i Motsetning til sammenslåing, rebasing flater historie, fordi det overfører gjennomført arbeid fra en gren til en annen. I den prosessen, uønskede historie er eliminert.,
Rebases er hvordan endringer skal passere fra toppen av hierarkiet nedover, og fusjonerer er hvordan de strømme tilbake oppover
Proffene
- Strømlinjeformer en potensielt kompleks historie
- Manipulere en enkelt forplikte er lett (f.eks., tilbakestilling av dem)
- Unngår å slå sammen begå «støy» i travle repos opptatt med grener
- Renser middels begår ved å gjøre dem til en single begår, som kan være nyttig for DevOps team
Ulemper
- Squashing funksjonen ned til en håndfull begår kan skjule sammenhengen
- Rebasing offentlige registre kan være farlig når det fungerer som et team
- Det er mer arbeid: Bruk av rebase å holde funksjonen gren alltid oppdatert
- Rebasing med eksterne avdelinger krever at du force push., Det største problemet folk ansikt er de force push, men har ikke sett git push-standard. Dette resulterer i oppdateringer til alle grener å ha samme navn, både lokalt og eksternt, og det er forferdelig å håndtere.
Hvis du rebase feil og utilsiktet omskrive historien, kan det føre til alvorlige problemer, så sørg for at du vet hva du gjør!
Hvordan du gjør det
Rebase funksjonen gren på master-gren ved hjelp av følgende kommandoer.,
$ git checkout feature$ git rebase master
Dette flytter hele funksjonen gren på toppen av master-gren. Den gjør dette ved å re-skriving prosjektet historien ved å splitter nye begår for hver innlegging i den opprinnelige (funksjon) gren.
Interaktiv Rebasing
Dette gjør det mulig å endre de begår som de er flyttet til den nye grenen. Dette er mer kraftig enn automatisert rebase, som tilbyr full kontroll over grenen er begått historie. Dette er vanligvis brukt til å rydde opp i en rotete historie før sammenslåing en funksjon gren i master.,
$ git checkout feature$ git rebase -i master
Dette vil åpne editoren, ved å liste opp alle de begår som er i ferd med å bli flyttet.
pick 22d6d7c Commit message#1pick 44e8a9b Commit message#2pick 79f1d2h Commit message#3
Dette definerer nøyaktig hva grenen vil se ut etter rebase er utført. Ved re-bestilling av enhetene, kan du gjøre historien ser ut som hva du vil. For eksempel, kan du bruke kommandoer som fixup
, squash
, edit
osv, i stedet for pick
.
Som en bruker
Så hva er best?, Hva gjør eksperter anbefaler?
Det er vanskelig å generalisere, og velger det ene eller det andre, siden hvert lag er forskjellige. Men vi må starte et sted.
Lag trenger for å vurdere flere spørsmål når de setter sine Git rebase vs. fusjonere politikk. Fordi som det viser seg, en arbeidsflyt strategi er ikke bedre enn den andre. Det er avhengig av deres team.
Vurdere nivået av rebasing og Git kompetanse på tvers av organisasjonen. Finne ut i hvilken grad du verdsetter enkelhet av rebasing i forhold til sporbarhet og historikk av sammenslåing.,
til Slutt, beslutninger om sammenslåing og rebasing bør vurderes i sammenheng med en klar forgrening strategi (Se denne artikkelen for å forstå mer om forgrening strategi). En vellykket forgrening strategi er designet rundt organiseringen av lagene.
Hva gjør jeg anbefaler?
Som teamet vokser, vil det bli vanskelig å administrere eller spore utvikling endringer med en alltid fusjonere politikk. Å ha en ren og forståelig begå historie, ved hjelp av Rebase er rimelig og effektive.,
Ved å vurdere følgende forhold og retningslinjer, kan du få mest mulig ut av Rebase:
- Du er å utvikle lokalt: Hvis du ikke har delt med noen andre. På dette punktet, bør du foretrekker rebasing over sammenslåing for å holde din historie ryddig. Hvis du har fått din personlige gaffel av depotet og som ikke deles med andre utviklere, du er trygg til å rebase selv etter at du har presset til din gren.
- – koden Din er klar til gjennomgang: Du opprettet en trekke forespørsel. Andre er gjennom arbeid og er potensielt hente det inn i gaffelen for lokal vurdering., På dette punktet, bør du ikke rebase arbeidet ditt. Du bør lage ‘etterbehandling’ forplikter og oppdatere funksjonen gren. Dette hjelper til med sporbarhet i trekk forespørsel og hindrer utilsiktet historie brudd.
- gjennomgangen er ferdig, og klar til å bli integrert i mål-gren. Gratulerer! Du er i ferd med å slette funksjonen gren. Gitt at andre utviklere vil ikke være hente-sammenslåing i disse endringene fra dette punktet, dette er din sjanse til å rense din historie., På dette punktet, kan du omskrive historien og brett den opprinnelige forplikter og de pesky ‘pr etterbehandling’ og ‘merge’ forplikter seg til et lite sett av fokusert forplikter. Å skape et eksplisitt fusjonere for disse begår er valgfritt, men har verdi. Den registrerer når funksjonen ble uteksaminert til master.
Konklusjon
jeg håper denne forklaringen har gitt noen kommentarer på Git slå sammen og Git rebase. Flett vs rebase strategi er alltid diskuteres. Men kanskje denne artikkelen vil hjelpe til å fjerne tvil og tillate deg å ha en tilnærming som fungerer for ditt lag.