I denne artikkelen vil jeg snakke om hvordan Git Rebase fungerer, forskjellene mellom Git Rebase og Git Fusjon, og hvordan jeg jobber med Git Rebase. Så la oss komme i gang.
La oss si, du har et git -depot med forpliktelsene EN, B, C i herre gren. Deretter opprettet du en ny gren noen branch og la til to nye forpliktelser D og E til noen branch gren.
Fig 1: Innledende forpliktelseshistorie.
La oss si, du glemte å legge til noe i herre gren. Så du går tilbake til herre gren og legg til en ny forpliktelse G til herre gren. Git -historien din skal se ut som følger.
Fig 2: Forplikt historie etter å ha lagt til forpliktelse i mastergrenen.
Alt ser bra ut. Nå, hvis du ville ha alle endringer du har gjort i noen branch grenen for å være i herre gren, du kan slå sammen noen branch gren til herre gren. Dette er hva git slå sammen gjøre.
Hva om du vil ha forpliktelsen G å være tilgjengelig i noen branch gren? Vel, du kan bruke git rebase for det.
Fra forpliktelseshistorien i fig 2 kan du se at grenen noen branch starter fra forpliktelsen C. Hvis du gjør en git rebase på noen branch, Da ville det starte fra forpliktelsen G Som vist i fig. 3 nedenfor. Legg merke til at innholdet i forpliktelsen D og E vil endre seg også etter rebaseoperasjonen. Forpliktelsene D og E vil inkludere endringene i forpliktelse G. Dette er grunnen til at jeg la til * symbol før forpliktelsene D og E.
Hvis du vil vite hvordan forpliktelseshistorien vil se ut hvis jeg slo den sammen, så ta en titt på fig 4. Jeg har inkludert det bare slik at du vil kunne sammenligne det med Git Rebase.
Fig 4: Forplikt historie hvis git sammenslåing ble brukt.
Nå som du vet hva som er git rebase, forskjellen mellom git rebase og git fusjoner og hvorfor git rebase den brukte, vil jeg vise deg hvordan du bruker den i neste del av denne artikkelen nedenfor.
Git rebase arbeidsflyt:
I denne delen vil jeg lage et nytt Git -depot på min lokale datamaskin og vise deg hvordan Git Rebase fungerer. Jeg anbefaler at du har god forståelse av Git -rebase før du bruker det på prosjektet ditt.
Først må du lage et nytt Git -depot Rebase-Demo/ på datamaskinen din som følger:
$ git init rebase-demo
Naviger nå til Rebase-Demo/ Katalog som følger:
$ CD Rebase-Demo/
Lag nå en ny fil test.tekst følgende:
$ ekko "a"> test.tekst
Testen.TXT-filen inneholder bare en-linje EN. La oss si, dette er din opprinnelige prosjektkode.
Nå, forplikte endringene som følger:
$ git Legg til .
$ git commit -m 'a'
Legg nå til en annen linje B til test.tekst fil som vist på skjermbildet nedenfor.
Nå, forplikte endringene som følger:
$ git Legg til .
$ git commit -m 'b'
La oss nå legge til en annen linje C til test.tekst fil.
Forplikt også endringene som følger:
$ git Legg til .
$ git commit -m 'c'
Nå skal forpliktelseshistorien til mastergrenen se ut som følger:
$ git log --oneline
La oss si, du har noen nye ideer som du vil prøve ut. Så la oss opprette og kasse til en ny gren ny funksjon følgende:
$ git -kassen -b nyfunksjon
Nå, legg til den nye ideen din (linjen D La oss si) til test.tekst fil.
Nå, forplikte endringene som følger:
$ git Legg til .
$ git commit -m 'd'
Legg nå linjen E til test.tekst fil.
Begå endringene som følger:
$ git Legg til .
$ git commit -m 'e'
Nå, forpliktelseshistorien til ny funksjon Grenen skal se ut som følger:
$ git log --oneline
Se hvordan forpliktelsene er i orden a < B < C < D < E?
Nå husker du at du glemte å legge noe til herre gren som du også ønsket å være i ny funksjon gren! Så kassen til herre gren.
Jeg la til en ny linje på slutten av test.tekst fil som du kan se.
Nå, forplikte endringene som følger:
$ git Legg til .
$ git commit -m 'g'
Nå, forpliktelseshistorien til herre grenen skal se slik ut.
EN < B < C < G
Nå, for å rebase forpliktelsene fra herre gren til ny funksjon filial, første kasse til ny funksjon gren.
$ Git Checkout New-Feature
Nå, gjør en git rebase av herre gren som følger:
$ git rebase master
Noen slår sammen konflikt! La oss fikse det.
Vel, endringene jeg har gjort i forpliktelsen G og D er i konflikt med hverandre. Jeg vil beholde begge disse.
Etter å ha fikset fusjonskonflikten, test.tekst Filen skal se ut som følger:
Legg nå endringene i iscenesettelsesområdet som følger:
$ git Legg til .
Fortsett nå rebasen som fungerer som følger:
$ git rebase --kontinue
Nok en sammenslåingskonflikt! Vel, dette kan skje. Rebase endrer Git -forpliktelseshistorien. Så det forventes ting som dette.
Det ser ut til at sammenslåingsprosessen mislyktes på grunn av noen tomme linjer. La oss fikse det.
Etter å ha fikset fusjonskonflikten, test.tekst filen skal se ut som følger.
Legg nå endringene i iscenesettelsesområdet som følger:
$ git Legg til .
Fortsett nå rebaseoperasjonen som følger:
$ git rebase --kontinue
Git rebase er fullført.
Som du kan se, blir forpliktelseshistorien til New-Feature-grenen oppdatert. Nå er forpliktelseshistorien som følger:
EN < B < C < G < D < E
Akkurat som forventet.
Finalen test.tekst filen skal se ut som følger.
Git rebase er et kraftig verktøy. Men du bør aldri bruke den på delte git -depoter. Bruk den bare på Git -lagringene som du bare jobber. Ellers vil du møte mange problemer underveis.
Så det er slik du bruker git rebase. Takk for at du leste denne artikkelen.