Git

Git Rebase Tutorial

Git Rebase Tutorial

Nybegynnere av Git advares mot rebase-kommandoen. Og med rette. Med alle de nye tingene å lære, er nybegynnere sannsynligvis bedre å beherske de grunnleggende konseptene før de fordyper seg i komplikasjonene ved å rebase. Men hvis du forstår det grunnleggende om sammenslåing av grener, kan det hjelpe deg å løse noen kompliserte utviklingsoppgaver når riktig tid kommer til å vite hvordan du skal baseres på nytt.

Git Rebase: Definisjoner

I henhold til git-dokumentasjonen, vil rebase-kommandoen på nytt forplikte seg på toppen av en annen basisspiss. Denne definisjonen kan være litt skremmende. Det er lettere å forklare rebase som en prosedyre som legger til endringene i den nåværende grenen i halen til en annen gren. La oss gå gjennom et eksempel for å få en bedre ide om hva som skjer.

Git Rebasing Eksempel

I dette eksemplet oppretter vi først en prøvesak med 'master' og 'feature' gren. Da vil vi gjøre en standard sammenslåing. Deretter vil vi gjenskape testsaken og utføre ombegrensning og sammenslåing.

1. Opprette master- og funksjonsgrener

Her er scenariet vi skal lage:

A - B - C (master) \ E - F (funksjon) 

I eksemplet ovenfor tar vi følgende vei:

  1. Forplikt A: vi legger til en.txt-fil i "master" -grenen
  1. Forplikte B: vi legger til b.txt-fil i "master" -grenen
  1. På dette stadiet lager vi grenen 'funksjon' som betyr at den vil ha en.txt og b.tekst
  1. Forplikt C: vi legger til c.txt-fil i "master" -grenen
  1. Vi går til 'feature' -grenen
  1. Forplikt E: vi endrer a.txt i 'funksjons' gren
  1. Forplikt F: vi endrer b.txt i 'funksjons' gren

Du kan opprette en mappe og kjøre følgende kode i mappen for å opprette situasjonen ovenfor:

git init touch a.txt git add -A git commit -m "Commit A: lagt til a.tekst "berør b.txt git add -A git commit -m "Commit B: lagt til b.txt "git gren funksjon touch c.txt git add -A git commit -m "Commit C: lagt til c.txt "git status git checkout-funksjonen ekko aaa> a.txt git add -A git commit -m "Commit E: modifisert a.txt "ekko bbb> b.txt git add -A git commit -m "Commit F: modifisert b.tekst" 

2. Enkel sammenslåing

La oss bruke loggkommandoen til å sjekke begge grenene.

Resultater for 'master':

$ git checkout master Byttet til gren 'master' $ git log --oneline 2bbde47 Forplikt C: lagt til c.txt b430ab5 Forplikt B: lagt til b.txt 6f30e95 Forplikt A: lagt til a.txt $ ls a.tekst b.tekst c.tekst 

Resultater for 'feature':

$ git checkout-funksjon Byttet til gren-funksjonen $ git log --oneline 0286690 Commit F: modifisert b.txt 7c5c85e Commit E: modifisert a.txt b430ab5 Forplikt B: lagt til b.txt 6f30e95 Forplikt A: lagt til a.txt $ ls a.tekst b.tekst 

Legg merke til hvordan funksjonsgrenen ikke har Commit C

La oss nå kjøre "flette" -filial med "master" -gren. Du blir bedt om å legge inn en kommentar. I kommentaren legger du til “Commit G:” i begynnelsen for å gjøre det lettere å spore.

$ git checkout master Byttet til filmmaster $ git merge-funksjon Slå sammen med "rekursiv" strategi. en.txt | 1 + b.txt | 1 + 2 filer endret, 2 innsettinger (+) 

Resultater for 'master':

 $ git checkout master Allerede på 'master' $ git log --oneline d086ff9 Forplikt G: Slå sammen filialfunksjon '0286690 Forplikt F: endret b.txt 7c5c85e Forplikt E: endret a.txt 2bbde47 Forplikt C: lagt til c.txt b430ab5 Forplikt B: lagt til b.txt 6f30e95 Forplikt A: lagt til a.txt $ ls a.tekst b.tekst c.tekst 

Resultater for 'feature':

$ git checkout-funksjon Byttet til gren-funksjonen $ git log --oneline 0286690 Commit F: modifisert b.txt 7c5c85e Forplikt E: endret a.txt b430ab5 Forplikt B: lagt til b.txt 6f30e95 Forplikt A: lagt til a.txt $ ls a.tekst b.tekst 

I "master" -grenen vil du legge merke til at det er en ny forpliktelse G som har slått sammen endringene fra "funksjons" -grenen. I utgangspunktet har følgende handling funnet sted:

A - B - C - G (master) \ / E - F (funksjon) 

I Commit G har alle endringene fra funksjonen blitt brakt inn i hovedgrenen. Men selve funksjonen har ikke blitt berørt på grunn av sammenslåingsprosessen. Legg merke til hash for hver kommisjon. Etter sammenslåingen har E (7c5c85e) og F (0286690) commit samme hash på 'feature' og 'master' gren.


3. Fusjonerer med rebasing

La oss gjenta trinn 1 for å opprette grenene 'master' og 'feature' igjen.

Resultater for 'master':

$ git checkout master Byttet til gren 'master' $ git log --online 7f573d8 Forplikt C: lagt til c.txt 795da3c Forplikt B: lagt til b.txt 0f4ed5b Forplikt A: lagt til a.txt $ ls a.tekst b.tekst c.tekst 

Resultater for 'feature':

$ git checkout-funksjon Byttet til filialfunksjon $ git log --oneline 8ed0c4e Forplikt F: endret b.txt 6e12b57 Commit E: modifisert a.txt 795da3c Forplikt B: lagt til b.txt 0f4ed5b Forplikt A: lagt til a.txt $ ls a.tekst b.tekst 

La oss basere på nytt fra funksjonen.

$ git checkout-funksjon Byttet til gren-funksjonen $ git rebase master Først spoler du hodet for å spille av arbeidet ditt på toppen av det ... Bruker: Commit E: endret en.txt Bruk: Forplikt F: endret b.tekst 

Slå deretter sammen 'funksjon' til 'master'.

$ git checkout master Byttet til filial 'master' $ git merge-funksjon Oppdaterer 7f573d8 ... 9efa1a3 Spol fremover a.txt | 1 + b.txt | 1 + 2 filer endret, 2 innsettinger (+) 

Resultater for 'master' gren:

$ git checkout master Allerede på 'master' $ git log --oneline 9efa1a3 Commit F: modifisert b.txt 8710174 Commit E: modifisert a.txt 7f573d8 Forplikt C: lagt til c.txt 795da3c Forplikt B: lagt til b.txt 0f4ed5b Forplikt A: lagt til a.txt $ ls a.tekst b.tekst c.tekst 

Resultater for 'feature' gren:

$ git checkout-funksjon Byttet til filialfunksjon $ git log --oneline 9efa1a3 Forplikt F: endret b.txt 8710174 Commit E: modifisert a.txt 7f573d8 Forplikt C: lagt til c.txt 795da3c Forplikt B: lagt til b.txt 0f4ed5b Forplikt A: lagt til a.txt $ ls a.tekst b.tekst c.tekst 

Legg merke til at begge grenene er like etter rebase og sammenslåing. Også hasjene for E og F har endret seg i begge grenene. I utgangspunktet, i rebasescenariet, skjedde dette:

A - B - C \ E '- F' (funksjon, master) 

Derfor er det ingen nye forpliktelser. E- og F-forpliktelsene er blitt beregnet på nytt og låst til slutten av "master" -grenen.

Rebasing er et nyttig verktøy når du vil rydde opp i historikken til arbeidet ditt. Imidlertid er det en fare som har gitt den gyldne regelen.


Golden Rule of Rebasing

Den gyldne regelen for rebasing er:

Gjør aldri en offentlig gren tilbake.

Som du kan se fra eksemplet ovenfor, beregner forpliktelsene på nytt på nytt. Når flere personer forgrener seg fra et offentlig depot, kan rebasing skape situasjoner der utviklere som har opprettet nye filialer, vil komme i svært kompliserte sammenslåingssituasjoner. Så det er en god ide å aldri omsette offentlige grener som deles.

For å konkludere:

Rebasing er et unikt trekk ved Git. Men bruk det med forsiktighet.

Mer informasjon:

Her er noen lenker for videre studier:

Git Rebase-dokumentasjon
Atlassian Merging vs Rebasing

Referanser:

Mus Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
De siste årene har datamaskiner og operativsystemer utviklet seg sterkt. Det var en tid da brukere måtte bruke kommandoer for å navigere gjennom filad...
Mus Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Dual Display Mouse Manager lar deg kontrollere og konfigurere musebevegelse mellom flere skjermer, ved å bremse bevegelsene nær grensen. Windows 10/8,...
Mus WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
Hvis du vil forbedre standardfunksjonene til musepekeren, bruk freeware WinMouse. Det legger til flere funksjoner som hjelper deg å få mest mulig ut a...