Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Synkronisering av Depotene | Mer Avanserte Arbeidsflyter
GitHub-Grunnleggende

Synkronisering av Depotene

Sveip for å vise menyen

Som nevnt i forrige kapittel, må vi synkronisere vår lokale gren med det eksterne depotet. For å gjøre dette, bør vi kjøre kommandoen git pull:

git pull
Forsøk på pull

Da vi kjørte kommandoen git pull, hentet Git oppdateringer, men oppdaget at våre lokale og eksterne grener har divergerte, noe som betyr at det finnes endringer på begge grenene som må forenes. Git kunne ikke fortsette fordi det må vite hvordan disse forskjellene skal håndteres, så vi setter merge-alternativet og kjører git pull-kommandoen igjen:

git config pull.rebase false
Note
Merk

Vi vil gå gjennom rebase-operasjonen senere i dette kurset.

git pull
Flettingskonflikt

Git forsøkte å automatisk slå sammen de lokale og eksterne endringene i README.md, men støtte på en flettekonflikt. La oss se på commit-treet, som viser hvor forgreininger og konflikter har oppstått:

git log --graph --oneline --all
Commit-tre

Løse konflikten

Som du ser, har vår nåværende lokale commit og commiten i den eksterne main-grenen en felles stamfar, men de har forgreinet seg, noe som fører til flettekonflikten vi må løse. For å gjøre dette åpner vi README.md-filen i Vim-editoren:

vim README.md
Konflikter i Vim

For å løse denne konflikten kan vi gå inn i insert mode ved å trykke i, fjerne konfliktmarkørene, og kombinere endringene på følgende måte:

Løst konflikt

Deretter bør du trykke på Escape-tasten, skrive :wq, og trykke på Enter-tasten for å lagre endringene og avslutte Vim. Nå må README.md-filen legges til i staging-området og deretter committes ved å bruke de respektive kommandoene:

git add README.md
git commit
Note
Merk

Etter at du har kjørt git commit-kommandoen, åpnes standard teksteditor (mest sannsynlig Vim). Du kan enten beholde standard commit-melding og avslutte Vim på samme måte som vi nettopp gjorde, eller du kan redigere meldingen og deretter avslutte.

Committer flettet fil

Til slutt kan vi trygt kjøre kommandoen git push og verifisere at treveisflettingen var vellykket ved å vise commit-treet:

git log --graph --oneline --all
Commit-tre

La oss oppsummere hva vi gjorde i disse to kapitlene:

  1. Vi simulerte samarbeid ved å gjøre endringer både lokalt og eksternt i README.md-filen;

  2. Vi gjorde først en commit direkte til det eksterne depotet, og deretter en annen endring lokalt;

  3. Da vi forsøkte å pushe våre lokale endringer, støtte vi på en konflikt fordi det eksterne depotet hadde nye oppdateringer;

  4. For å løse dette hentet vi endringene fra det eksterne depotet, noe som resulterte i en flettekonflikt;

  5. Vi løste deretter konflikten manuelt i README.md-filen ved hjelp av Vim-editoren, committet de løste endringene, og pushet til slutt de endelige oppdateringene til det eksterne depotet.

question mark

Hvilken kommando setter Git til å bruke merge (ikke rebase) under git pull?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 3. Kapittel 2
some-alt