Close

git pull

De opdracht git pull wordt gebruikt om inhoud op te halen en te downloaden van een externe repository en de lokale repository onmiddellijk bij te werken, zodat deze overeenkomt met die inhoud. Het samenvoegen van externe upstreamwijzigingen in je lokale repository is een veelvoorkomende taak in samenwerkingsprocessen op basis van Git. De opdracht git pull is eigenlijk een combinatie van twee andere opdrachten: git fetch gevolgd door git merge. In de eerste fase van de bewerking zal git pull een git fetch uitvoeren voor de lokale branch waarop HEAD is gericht. Zodra de inhoud is gedownload, zal git pull een merge-workflow invoeren. Er wordt een nieuwe merge-commit aangemaakt en HEAD wordt bijgewerkt, zodat deze naar de nieuwe commit wijst.


Git pull gebruiken


Hoe het werkt

De git pull-opdracht voert eerst git fetch uit die inhoud downloadt van de opgegeven externe repository. Vervolgens wordt een git merge uitgevoerd om de externe inhoudsverwijzingen en heads samen te voegen in een nieuwe lokale merge-commit. Laten we het volgende voorbeeld bekijken om het pull- en samenvoegingsproces beter te demonstreren. Stel dat we een repository hebben met een main-branch en een externe oorsprong.

In dit scenario downloadt git pull alle wijzigingen vanaf het punt waar de inhoud van de lokale branch en main-branch scheidden. In dit voorbeeld is dat punt E. De git pull haalt de gescheiden externe commits A-B-C op. Het pull-proces zal vervolgens een nieuwe lokale merge-commit maken met de inhoud van de nieuwe, uiteenlopende remote commits.

Consolevenster
gerelateerd materiaal

Uitgebreid Git log

Logo Bitbucket
Oplossing bekijken

Git leren met Bitbucket Cloud

In het bovenstaande diagram zien we de nieuwe commit H. Deze commit is een nieuwe merge-commit die de inhoud van externe A-B-C-commits en een gecombineerd logbericht bevat. Dit voorbeeld is een van de weinige strategieën voor git pull-samenvoegingen. Er kan een --rebase-optie worden doorgegeven aan git pull om een rebase-samenvoegingsstrategie te gebruiken in plaats van een merge-commit. Het volgende voorbeeld laat zien hoe een rebase pull werkt. Stel dat we ons aan het beginpunt van ons eerste diagram bevinden en dat we git pull --rebase hebben uitgevoerd.

Centrale git-repo naar lokale git-repo

In dit diagram kunnen we nu zien dat een rebase pull niet de nieuwe H-commit creëert. In plaats daarvan heeft de rebase de externe commits A--B--C gekopieerd en de lokale commits E--F--G herschreven, zodat deze daarna worden weergegeven in de geschiedenis van de lokale herkomst/belangrijkste commit.

Gemeenschappelijke opties


git pull <remote>

Haal de opgegeven externe kopie van de huidige branch op en voeg deze onmiddellijk samen in de lokale kopie. Dit is hetzelfde als git fetch <remote>. gevolgd door git merge origin/<current-branch>.

git pull --no-commit <remote>

Net als bij de standaardaanroep haal je de externe inhoud op, maar er wordt geen nieuwe merge-commit gemaakt.

git pull --rebase <remote>

Hetzelfde als de vorige pull, maar nu moet je niet git merge maar git rebase gebruiken om de externe branch te integreren met de lokale.

git pull --verbose

Geeft uitgebreide uitvoer tijdens een pull die de inhoud toont die wordt gedownload, inclusief details over de samenvoeging.

Git pull-discussie


Je kunt git pull zien als Gits versie van svn-update. Het biedt een eenvoudige manier om je lokale repository te synchroniseren met upstream wijzigingen. In het volgende diagram wordt elke stap van het pull-proces uitgelegd.

git pull

Je begint te denken dat je repository is gesynchroniseerd, maar dan onthult git fetch dat de oorspronkelijke hoofdversie vorderingen maakte sinds je laatste controle. Git merge integreert vervolgens direct de externe hoofdversie onmiddellijk in de lokale.

Git pull en synchroniseren


git pull is een van de vele opdrachten die de verantwoordelijkheid claimen voor het 'synchroniseren' van externe inhoud. De git remote-opdracht wordt gebruikt om aan te geven op welke externe eindpunten de synchronisatieopdrachten zullen werken. De git push -opdracht wordt gebruikt om inhoud te uploaden naar een externe repository.

De git fetch-opdracht kan worden verward met git pull. Ze worden beide gebruikt om externe inhoud te downloaden. Er kan een belangrijk veiligheidsonderscheid worden gemaakt tussen git pull en get fetch. git fetch kan worden beschouwd als de 'veilige' optie, terwijl git pull als onveilig kan worden beschouwd. git fetch zal de externe inhoud downloaden en de status van de lokale repository niet wijzigen. Eventueel zal git pull externe inhoud downloaden en onmiddellijk proberen de lokale status te wijzigen zodat deze overeenkomt met die inhoud. Dit kan er onbedoeld toe leiden dat de lokale repository in een conflicterende staat terechtkomt.

Een pull uitvoeren via Rebase


De optie --rebase kan worden gebruikt om een lineaire geschiedenis te garanderen doordat onnodige merge-commits worden voorkomen. Veel ontwikkelaars geven de voorkeur aan een rebase boven samenvoegen, omdat hierdoor wijzigingen worden toegevoegd bovenop al het werk van anderen. In die zin lijkt het gebruik van git pull met de --rebase-markering nog meer op svn update dan een gewone git pull.

In feite is het uitvoeren van een pull met --rebase zo'n veelvoorkomende workflow dat er een speciale configuratieoptie voor is:

git config --global branch.autosetuprebase always

Nadat die opdracht is uitgevoerd, worden alle git pull-opdrachten geïntegreerd via git rebase in plaats van git merge.

Voorbeelden van git pull


De volgende voorbeelden laten zien hoe je git pull gebruikt in veelvoorkomende scenario's:

Standaardgedrag

git pull

Het uitvoeren van de standaard git pull-aanroep is gelijk aan git fetch origin HEAD en git merge HEAD, waarbij HEAD verwijst naar de huidige branch.

Git pull op externe repo's

git checkout new_feature
git pull <remote repo>

Dit voorbeeld voert eerst een checkout uit en schakelt over naar de -branch. Daarna wordt de git pull uitgevoerd waarbij wordt doorgegeven. Dit zal impliciet de newfeature-branch ophalen uit . Zodra de download is voltooid, wordt er een git merge gestart.

Git pull rebase in plaats van merge

Het volgende voorbeeld laat zien hoe je synchroniseert met de main-branch van de centrale repository met behulp van een rebase:

git checkout main
git pull --rebase origin

Dit plaatst je lokale wijzigingen gewoon boven op wat iedereen al heeft bijgedragen.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Mensen die samenwerken met een muur vol tools

Bitbucket-blog

Toelichting DevOps

DevOps-leertraject

Demo Den Feature-demo's met Atlassian-experts

Hoe Bitbucket Cloud werkt met Atlassian Open DevOps

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up