Synkronisering af Repositories
Stryg for at vise menuen
Som nævnt i det forrige kapitel, skal vi synkronisere vores lokale branch med det eksterne repository. For at gøre dette skal vi køre kommandoen git pull:
git pull
Da vi kørte kommandoen git pull, hentede Git opdateringer, men bemærkede at vores lokale og eksterne branches er divergeret, hvilket betyder, at der er ændringer på begge branches, som skal afstemmes. Git kunne ikke fortsætte, fordi det skal vide, hvordan disse forskelle skal håndteres, så lad os sætte merge-indstillingen og køre git pull-kommandoen igen:
git config pull.rebase false
Vi gennemgår rebase-operationen senere i dette kursus.
git pull
Git forsøgte at flette de lokale og eksterne ændringer til README.md automatisk, men stødte på en flettekonflikt. Lad os se på commit-træet, som viser, hvor forgreningen og konflikterne er opstået:
git log --graph --oneline --all
Løsning af konflikten
Som du kan se, deler vores nuværende lokale commit og committet i den eksterne main-gren en fælles forfader, men de forgrener sig, hvilket fører til den flettekonflikt, vi skal løse. For at gøre dette åbner vi README.md-filen i Vim editoren:
vim README.md
For at løse denne konflikt kan vi gå ind i insert mode ved at trykke på i, fjerne konfliktmarkørerne og kombinere ændringerne på følgende måde:
Dernæst skal du trykke på Escape-tasten, skrive :wq og trykke på Enter-tasten for at gemme ændringerne og afslutte Vim. For at fuldføre sammenfletningen skal filen README.md nu tilføjes til staging-området og derefter committes ved hjælp af de respektive kommandoer:
git add README.md
git commit
Efter at have kørt kommandoen git commit, åbnes standardteksteditoren (formentlig Vim). Du kan enten beholde standard commit-beskeden og afslutte Vim på samme måde som før, eller du kan redigere beskeden og derefter afslutte.
Endelig kan vi trygt køre kommandoen git push og verificere, at trevejsfletningen var succesfuld ved at vise commit-træet:
git log --graph --oneline --all
Lad os gennemgå, hvad vi gjorde i disse to kapitler:
-
Vi simulerede samarbejde ved at lave ændringer både lokalt og eksternt i filen
README.md; -
Vi lavede først et commit direkte til det eksterne repository, og derefter lavede vi en anden ændring lokalt;
-
Da vi forsøgte at pushe vores lokale ændringer, stødte vi på en konflikt, fordi det eksterne repository havde nye opdateringer;
-
For at løse dette trak vi ændringerne fra det eksterne repository, hvilket resulterede i en fletningskonflikt;
-
Vi løste derefter manuelt konflikten i filen
README.mdved hjælp af Vim-editoren, committede de løste ændringer og pushed de endelige opdateringer til det eksterne repository.
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