Grundlæggende om Rebase
Stryg for at vise menuen
Oprettelse af et commit på main-grenen
Lad os starte med at lave et commit direkte i den eksterne main-gren ved at redigere filen README.md i det eksterne repository. Dette vil medføre, at main-grenen og feature/payment-grenen får en forskellig commit-historik.
Her er linjen, der blev tilføjet til filen:
New feature will soon be integrated.
Her er den tilhørende commit-besked:
Add information about new feature in README.md
Forståelse af rebase
Som nævnt i det forrige kapitel, kan og bør feature-grenen, når den er blevet gennemgået og testet, flettes tilbage til main-grenen. Indtil nu har vi kun brugt kommandoen git merge til dette formål. En anden tilgang er dog at bruge kommandoen git rebase.
Rebase er processen, hvor en række commits flyttes eller kombineres til et nyt base commit. Dette gøres ved at afspille ændringerne fra én gren over på en anden gren, hvilket resulterer i en lineær commit-historik.
Når vi opretter en gren, holder Git styr på det seneste commit på begge grene. Hvis kun én gren har nye ændringer, kan Git fast-forwarde og anvende ændringerne. Hvis begge grene har nye ændringer, opretter Git et nyt merge-commit, hvilket resulterer i et trevejs-merge.
Her er, hvordan et trevejs-merge ville se ud i vores tilfælde, hvor C4 var det seneste commit på feature/payment-grenen før sammenfletning:
Dog kan trevejsfletninger gøre fejlfinding mere kompliceret på grund af den opdelte, ikke-lineære historik. Ved at rebasere ændrer vi grundlaget for vores commits og afspiller dem oven på det nye grundlag, hvilket gør det muligt for Git at udføre en fast-forward-fletning og opretholde en lineær historik.
Her er en animation, der illustrerer, hvordan rebase kan udføres i vores tilfælde (commit-identifikatorerne svarer ikke til de rigtige her):
Når du rebaser en gren, omskriver du dens historik. Det betyder, at de gamle commits erstattes med nye, som har forskellige identifikatorer (hash-summer), fordi de er baseret på andre snapshots af koden. Som vist i animationen ovenfor, ændrede identifikatoren for committen på feature/payment-grenen sig efter rebase.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat