- Git rebase
- Før rebasing
- Vanlig rebase
- Interaktiv rebase
- Force-trykk
- slå sammen konflikter
Denne guiden hjelper deg å komme i gang med rebasing, styrke-presser, og fixingmerge konflikter lokalt.
Før du dykker ned i dette dokumentet, kan du gjøre deg kjent med usingGit via kommandolinjen.
Git rebase
Rebasing er en svært vanlig drift inGit., Det er følgende rebase valg:
- Vanlig rebase.
- Interaktiv rebase.
Før rebasing
git rebase
omskriver begå historie. Det kan være skadelig å gjøre det inshared grener. Det kan føre til komplekse og vanskelig å løse fletter konflikter. Inthese tilfeller, i stedet for rebasing din gren mot standard gren,bør du vurdere å trekke det i stedet (git pull origin master
). Det har en similareffect uten at det går ut over arbeidet ditt bidragsytere.,Det er tryggere å sikkerhetskopiere din gren før rebasing å sørge for at du ikke loseany endringer. Tenk For eksempel på en funksjon branchcalled my-feature-branch
:
-
Åpne din har filial i terminal:
– >
git checkout my-feature-branch
-
Checkout en ny gren av det:
– >
git checkout -b my-feature-branch-backup
-
Gå tilbake til din opprinnelige gren:
– >
git checkout my-feature-branch
Nå kan du trygt rebase det., Hvis noe går galt, kan du gjenopprette yourchanges ved å tilbakestille my-feature-branch
mot my-feature-branch-backup
:
Merk at hvis du har lagt inn forandringer til my-feature-branch
etter å skape backup gren,mister du dem når du tilbakestiller.
Vanlig rebase
Med en vanlig rebase kan du oppdatere funksjonen gren med defaultbranch (eller noen annen gren).Dette er et viktig skritt for Git-basert utvikling og strategier., Du canensure at endringene du legger til codebase ikke bryte anyexisting endringene lagt til målet gren etter at du har opprettet din featurebranch.,
For example, to update your branch my-feature-branch
with master
:
-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
Når du rebase:
- Git importerer alle de begår sendt til
master
etter themoment du opprettet funksjonen grenen til det nåværende tidspunkt. - Git setter forplikter du har i din har avdeling på toppen av alleden begår importert fra
master
:
Du kan erstatte master
med andre grenen du ønsker å rebase mot, forexample, release-10-3
., Du kan også erstatte origin
med andre remoterepositories, for eksempel upstream
. For å kontrollere hvilke fjernkontroller du har linket til din localrepository, kan du kjøre git remote -v
.
Hvis det er fusjonere konflikter, Git blir du bedt om å fixthem før du fortsetter rebase.
for Å lære mer, sjekk Git dokumentasjon på rebasingand rebasing strategier.
Interaktiv rebase
Du kan bruke interaktive rebase å endre forplikter. For eksempel endre en commitmessage, squash (bli flere forplikter seg til én), rediger, eller deletecommits., Bruk en rebase for å endre fortiden begå meldinger,og å organisere begå historie av avdelingen din for å holde det rent.
Når du ønsker å forandre noe i siste forplikter, bruk interactiverebase ved å føre flagget --interactive
(eller -i
) til rebase kommando.,
For eksempel, hvis du ønsker å redigere de siste tre begår i din gren(HEAD~3
), kjører du:
– >
git rebase -i HEAD~3
Git åpner de tre siste begår i din terminal tekst-editor og describesall den interaktive rebase alternativer du kan bruke. Standard er alternativet pick
,som opprettholder forplikte seg uendret. Sett søkeordet pick
i henhold til operasjon du ønsker å utføre i hver innlegging. For å gjøre dette, må du editthe begår i din terminal er en tekst editor.,
For eksempel, hvis du bruker Vim som en tekst editor ina macOS er ZSH
shell, og du ønsker å ta knekken på alle de tre forplikter seg(bli med dem inn i ett):
- Trykk ion tastaturet for å bytte til Vim er i redigeringsmodus.
- Naviger med piltastene på tastaturet for å redigere den andre begår keywordfrom
pick
tilsquash
(ellers
). Gjør det samme for det tredje har begått.Den første begå skal stå uendret (pick
) som vi ønsker å squashthe andre og tredje inn i den første., - Trykk Escape for å gå ut av redigeringsmodus.
- Type
:wq
for å «skrive» (lagre) og «avslutt». - Git utganger begå meldingen, slik at du har en sjanse til å redigere det:
- Alle linjer som begynner med
#
ignoreres, og som ikke er inkludert i commitmessage. Alt annet er inkludert. - for Å la den være som den er, skriver du inn
:wq
. For å redigere begå melding: bytt til theediting modus, redigere begå en melding og lagre det som du nettopp gjorde.,
- Alle linjer som begynner med
- Hvis du ikke har skjøvet forplikter seg til eksterne gren før rebasing,trykk endringene normalt. Hvis du hadde skjøvet disse begår allerede,styrke-push i stedet.
Merk at fremgangsmåten for å redigere gjennom kommando linje kan være slightlydifferent avhengig av operativsystemet og skall du bruker.
Se Mange angre muligheter i Gitfor en dypere titt inn i interaktiv rebase.,
Force-trykk på
Når du utføre mer komplekse operasjoner, for eksempel, squash forplikter, tilbakestille orrebase din gren, må du tvinge frem en oppdatering til den eksterne gren.Disse operasjonene innebærer skrive begå historie av grenen.For å tvinge frem en oppdatering, pass flagget --force
eller -f
til push
– kommandoen. Forexample:
– >
git push --force origin my-feature-branch
å Tvinge en oppdatering er ikke anbefalt når du arbeider på sharedbranches.
Alternativt, kan du sende flagg --force-with-lease
i stedet., Det er sikrere, som det ikke overskrive noe arbeid på remotebranch hvis mer begår ble lagt til den eksterne gren av noen andre:
– >
git push --force-with-lease origin my-feature-branch
Dersom den grenen du ønsker å tvinge-push er beskyttet,kan du ikke tvinge-trykk til det med mindre du opphev beskyttelse av det første. Så du canforce-trykk og re-beskytte det.,
slå sammen konflikter
Som Git er basert på å sammenligne versjoner av en fileline-av-line, når en linje endret i din gren sammenfaller med sameline endret i mål gren (etter det øyeblikket du opprettet en funksjon gren fra det), Gitidentifies disse endringene som en sammenslåing konflikt. For å fikse det, du trenger å choosewhich versjon av den linjen du ønsker å beholde.
de Fleste konflikter kan løses gjennom GitLab UI.
For mer komplekse saker, finnes det ulike metoder for å løse dem. Det arealso Git GUI-programmer som kan hjelpe byvisualizing forskjellene.,
for Å løse konflikter lokalt, kan du bruke følgende fremgangsmåte:
-
Åpne terminal kassa og din funksjonen gren, for eksempel
my-feature-branch
:– >
git checkout my-feature-branch
-
Rebase din gren mot målet gren så Gitprompts du med konflikter:
– >
git rebase origin/master
- Åpne motstridende fil i en kode editor for din preferanse.
- Se etter konflikten blokk:
- Det begynner med markør:
<<<<<<< HEAD
., - Nedenfor, det er innholdet med dine endringer.
- markør:
=======
indikerer slutten av endringene. - Nedenfor, det er innholdet av de siste endringene i den aktuelle gren.
- markør
>>>>>>>
indikerer slutten av konflikten.
- Det begynner med markør:
- Rediger: velg hvilken versjon (før eller etter
=======
) du vil tokeep, og deretter slette den delen av innhold du ikke vil ha i filen. - Slette markører.
- Lagre filen.,
- Gjenta prosessen hvis det er andre filer i konflikt.
-
Trinn endringer:
– >
git add .
-
legge inn forandringene dine:
– >
git commit -m "Fix merge conflicts"
-
Fortsett rebasing:
– >
git rebase --continue
cautionUp til dette punktet, du kan kjøregit rebase --abort
for å stoppe prosessen.Git avbryter rebase og ruller tilbake grenen til tilstanden du hadde beforerunninggit rebase
.,Etter at du har kjørtgit rebase --continue
den rebase ikke kan bli avbrutt. - Force-presse deg til den eksterne gren.
Leave a Reply