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.
gerelateerd materiaal
Uitgebreid Git log
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.
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.
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 git pull
uitgevoerd waarbij 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.