- Git rebase
- Før rebasing
- Regelmæssige rebase
- Interaktive rebase
- Kraft-tryk på
- Flet konflikter
Denne guide hjælper dig med at komme i gang med rebasing, kraft-presser, og fixingmerge konflikter lokalt.
før du dykker ind i dette dokument, skal du sørge for at være bekendt med at brugegit gennem kommandolinjen.
Git rebase
Rebasing er en meget almindelig operation inGit., Der er følgende rebase muligheder:
- regelmæssig rebase.
- interaktiv rebase.
før rebasing
git rebase
omskriver commit-historikken. Det kan være skadeligt at gøre det isdelte grene. Det kan forårsage kompleks og svært at løse fusionskonflikter. I disse tilfælde,i stedet for at rebasing din gren mod standard gren, overveje at trække det i stedet (git pull origin master
). Det har en lignende effekt uden at gå på kompromis med dine bidragyderes arbejde.,det er mere sikkert at sikkerhedskopiere din filial, før du genstarter for at sikre dig, at du ikke mister nogen ændringer. For eksempel overveje en funktion branchcalled my-feature-branch
:
-
Åbn din funktion filial i terminalen:
git checkout my-feature-branch
-
Checkout-en ny gren af det:
git checkout -b my-feature-branch-backup
-
Gå tilbage til din oprindelige gren:
git checkout my-feature-branch
Nu kan du trygt rebase det., Hvis noget går galt, kan du gendanne yourchanges ved at nulstille my-feature-branch
mod my-feature-branch-backup
:
Bemærk, at hvis du har tilføjet ændringer my-feature-branch
efter at skabe backup gren,mister du dem, når du nulstiller.
almindelig rebase
med en almindelig rebase kan du opdatere din funktionsgren med defaultbranch (eller en hvilken som helst anden gren).Dette er et vigtigt skridt for Git-baserede udviklingsstrategier., Du kan sikre dig, at de ændringer, du tilføjer til kodebasen, ikke bryder nogen eksisterende ændringer, der er tilføjet til målgrenen, efter at du har oprettet 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 importen alle begår forelagt
master
efter themoment du oprettede din funktion gren, indtil det nuværende øjeblik. - Git sætter begår du har i din funktion gren på toppen af alle begår importeret fra
master
:
kan Du erstatte master
med en anden gren, du ønsker at rebase mod, forexample, release-10-3
., Du kan også erstatte origin
med andre remoterepositories, for eksempel: upstream
. For at kontrollere, hvilke fjernbetjeninger du har linket til din lokalepository, kan du køre git remote -v
.
hvis der er fusionskonflikter, beder Git dig om at rette dem, før du fortsætter rebasen.
for at lære mere, tjek Git dokumentation om rebasing og rebasing strategier.
interaktiv rebase
Du kan bruge interaktiv rebase til at ændre commits. Du kan f.eks. ændre en commitmessage, s .uash (Deltag i flere commits til onen), Rediger eller deletecommits., Brug en rebase til at ændre tidligere commit-meddelelser og organisere din filials commit-historie for at holde den ren.
Når du vil ændre noget i de seneste commits, skal du bruge interactiverebase ved at sende flaget --interactive
(eller -i
) til rebase-kommandoen.,
For eksempel, hvis du ønsker at redigere de sidste tre begår i din filial(HEAD~3
), kør:
git rebase -i HEAD~3
Git åbner de sidste tre begår i din terminal tekst editor og describesall den interaktive rebase muligheder, du kan benytte. Standardindstillingen er pick
,som opretholder commit uændret. Udskift nøgleordet pick
i henhold til den handling, du vil udføre i hvert commit. For at gøre dette skal du redigere commits i din terminals teksteditor.,hvis du f.eks. bruger Vim som teksteditor ina macOS ‘ s ZSH
shell, og du vil s .uash alle de tre commits(slutte dem til en):
- tryk på Ion på tastaturet for at skifte til Vim ‘ s redigeringstilstand.
- Naviger med piletasterne til at redigere anden begå keywordfrom
pick
tilsquash
(ellers
). Gør det samme med den tredje forpligtelse.Den første commit bør forblive uændret (pick
) som vi ønsker at s .uashden anden og tredje ind i den første., - tryk på Escape for at forlade redigeringsfunktionen.
- Type
:wq
for at ” skrive “(gemme) og”afslutte”. - Git udsender commit-meddelelsen, så du har en chance for at redigere den:
- alle linjer, der starter med
#
ignoreres og er ikke inkluderet i commitmessage. Alt andet er inkluderet. - for at lade det være som det er, skriv
:wq
. Sådan redigerer du commit-meddelelsen: skift tilredigeringstilstand, Rediger commit-meddelelsen og gem den som du lige gjorde.,
- alle linjer, der starter med
- hvis du ikke har skubbet dine forpligtelser til fjerngrenen,før du genstarter, skal du skubbe dine ændringer normalt. Hvis du allerede havde skubbet disse forpligtelser, force-push i stedet.
Bemærk, at trinnene til redigering gennem kommandolinjen kan være lidtforskellige afhængigt af dit operativsystem og den shell, du bruger.
se adskillige Fortryd muligheder i Gitfor et dybere kig på interaktiv rebase.,
Force-push
Når du udfører mere komplekse operationer, f.eks. s .uash commits, reset orrebase din filial, skal du tvinge en opdatering til fjerngrenen.Disse aktiviteter indebærer, at omskrive begå historien om grenen.At tvinge en opdatering, passerer flag --force
eller -f
til push
kommandoen. Fore .ample:
git push --force origin my-feature-branch
Det anbefales ikke at tvinge en opdatering, når du arbejder på sharedbranches.
Alternativt kan du sende flaget--force-with-lease
i stedet., Det er sikrere, da det ikke overskriver enhver form for arbejde på remotebranch hvis flere begår blev tilføjet til fjern gren af en anden person:
git push --force-with-lease origin my-feature-branch
Hvis den gren, du ønsker at kraft-tryk er beskyttet,kan du ikke tvinge-skub til det, medmindre du fjerner du beskyttelsen for det første. Derefter kan duforce-push og re-beskytte det.,
Flet konflikter
Som Git er baseret på at sammenligne versioner af en fileline-by-line, når en linje er ændret i din afdeling falder sammen med sameline ændret i målet filial (efter det tidspunkt, du oprettede din funktion gren fra det), Gitidentifies disse ændringer som en sammenfletning af konflikten. For at rette op på det skal du vælgehvilken version af den linje du vil beholde.
de fleste konflikter kan løses gennem GitLab UI.
For mere komplekse tilfælde er der forskellige metoder til at løse dem. Der er også Git GUI apps, der kan hjælpe vedvisualisere forskellene.,
At løse konflikter lokalt, kan du bruge følgende metode:
-
Åbn en terminal og checkout din funktion gren, for eksempel:
my-feature-branch
:git checkout my-feature-branch
-
Rebase din filial mod målet filial, så Gitprompts du med konflikter:
git rebase origin/master
- Åbn modstridende fil i en kode, redaktør af din præference.
- Kig efter konfliktblokken:
- det begynder med markøren:
<<<<<<< HEAD
., - nedenfor er der indholdet med dine ændringer.
- markøren:
=======
angiver slutningen af dine ændringer. - nedenfor er der indholdet af de seneste ændringer i målgrenen.
- markøren
>>>>>>>
angiver slutningen af konflikten.
- det begynder med markøren:
- Rediger filen: vælg, hvilken version (før eller efter
=======
), du ønsker tokeep, og derefter slette den del af indholdet, som du ikke ønsker i filen. - Slet markørerne.
- Gem filen.,
- gentag processen, hvis der er andre modstridende filer.
-
Trin dine ændringer er:
git add .
-
Begå dine ændringer:
git commit -m "Fix merge conflicts"
-
Fortsat rebasing:
git rebase --continue
cautionUp til dette punkt, du kan køregit rebase --abort
for at stoppe processen.Git Afbryder rebase og ruller tilbage grenen til den tilstand, du havde førerunninggit rebase
.,Når du har kørtgit rebase --continue
, kan rebasen ikke afbrydes. - Force-tryk på din fjerngren.
Leave a Reply