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
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
Vi vil gå gjennom rebase-operasjonen senere i dette kurset.
git pull
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
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
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:
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
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.
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
La oss oppsummere hva vi gjorde i disse to kapitlene:
-
Vi simulerte samarbeid ved å gjøre endringer både lokalt og eksternt i
README.md-filen; -
Vi gjorde først en commit direkte til det eksterne depotet, og deretter en annen endring lokalt;
-
Da vi forsøkte å pushe våre lokale endringer, støtte vi på en konflikt fordi det eksterne depotet hadde nye oppdateringer;
-
For å løse dette hentet vi endringene fra det eksterne depotet, noe som resulterte i en flettekonflikt;
-
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.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår