Git Checkout
Op deze pagina wordt ingegaan op de opdracht git checkout
. Er wordt ingegaan op gebruiksvoorbeelden en randscenario's. Een 'checkout' betekent in Git de omschakeling tussen verschillende versies van een doelentiteit. De opdracht git checkout
werkt op drie verschillende entiteiten: bestanden, commits en branches. Naast de definitie voor 'checkout' wordt vaak de uitdrukking 'uitchecken' gebruikt; deze verwijst naar de uitvoering van de opdracht git checkout
. In het onderwerp Wijzigingen ongedaan maken zagen we hoe git checkout
kan worden gebruikt om oude commits te bekijken. In dit document ligt vooral de nadruk op checkout-bewerkingen voor branches.
Het uitchecken van branches is vergelijkbaar met het uitchecken van oude commits en bestanden, in die zin dat de werkmap wordt bijgewerkt om overeen te komen met de geselecteerde branch/revisie; nieuwe wijzigingen worden echter opgeslagen in de projectgeschiedenis – dat wil zeggen dat het geen alleen-lezenbewerking is.
Branches uitchecken
Met de opdracht git checkout
kun je navigeren tussen de branches die zijn gemaakt door git branch
. Bij het uitchecken van een branch worden de bestanden in de werkmap bijgewerkt, zodat ze overeenkomen met de versie die in die branch is opgeslagen. Ook wordt Git geïnformeerd dat alle nieuwe commits voor die branch moeten worden opgenomen. Zie het als een manier om te selecteren aan welke ontwikkelingslijn je werkt.
De beschikking over een speciale branch voor elke nieuwe functie is een ingrijpende wijziging ten opzichte van een traditionele SVN-workflow. Hierdoor is het ongekend eenvoudig om nieuwe experimenten uit te proberen zonder bang te hoeven zijn dat bestaande functionaliteit wordt vernietigd. Ook is het hierdoor mogelijk om tegelijkertijd aan veel niet-gerelateerde functies te werken. Daarnaast ondersteunen branches verschillende samenwerkingsworkflows.
De opdracht git checkout
kan af en toe worden verward met git clone
. Het verschil tussen de twee opdrachten is dat 'clone' code ophaalt uit een externe repository, terwjil 'checkout' schakelt tussen versies van code die al op het lokale systeem staan.
gerelateerd materiaal
Uitgebreid Git log
Oplossing bekijken
Git leren met Bitbucket Cloud
Gebruik: Bestaande branches
Ervan uitgaande dat de repo waarin je werkt reeds bestaande branches bevat, kun je schakelen tussen deze branches met behulp van git checkout
. Voer git branch
uit om erachter te komen welke branches beschikbaar zijn en wat de huidige branchnaam is.
$> git branch
main
another_branch
feature_inprogress_branch
$> git checkout feature_inprogress_branch
Het bovenstaande voorbeeld laat zien hoe je een lijst met beschikbare branches kunt bekijken door de opdracht git branch
uit te voeren en over te schakelen naar een opgegeven branch (in dit geval feature_inprogress_branch
).
Nieuwe branches
Git checkout
werkt samen met git branch. De opdracht git branch
kan worden gebruikt om een nieuwe branch aan te maken. Wanneer je een nieuwe functie wilt starten, maak je een nieuwe branch aan van main
met behulp van git branch new_branch
. Eenmaal aangemaakt kun je git checkout new_branch
gebruiken om naar die branch te gaan. Bovendien accepteert de opdracht git checkout
een -b
-argument dat fungeert als een eenvoudige methode die de nieuwe branch aanmaakt en er onmiddellijk naar overschakelt. Je kunt aan meerdere functies in één repository werken door ertussen te schakelen met git checkout
.
git checkout -b <new-branch>
Het bovenstaande voorbeeld maakt en controleert tegelijkertijd
. De optie -b
is een handige markering die Git vertelt om git branch
uit te voeren voordat git checkout
wordt uitgevoerd.
git checkout -b <new-branch> <existing-branch>
Standaard baseert git checkout -b
de new-branch
op de huidige HEAD
. Er kan een optionele aanvullende branchparameter worden doorgegeven aan git checkout
. In het bovenstaande voorbeeld wordt <
existing-branch >
doorgegeven, die vervolgens new-branch
baseert op existing-branch
in plaats van op de huidige HEAD
.
Wisselen van branch
Het wisselen van branch is heel eenvoudig. Door het volgende uit te voeren, wordt HEAD
verwezen naar de tip van de
.
git checkout <branchname>
Git houdt een geschiedenis van checkout-bewerkingen bij in de reflog. Je kunt git reflog
uitvoeren om de geschiedenis te bekijken.
Git-checkout voor een externe branch
Wanneer je met een team samenwerkt, is het gebruikelijk om externe repositories te gebruiken. Deze repositories kunnen worden gehost en gedeeld of kunnen de lokale kopie van een collega zijn. Elke externe repository bevat zijn eigen set branches. Om een remote branch te kunnen uitchecken, moet je eerst de inhoud van de branch ophalen.
git fetch --all
In moderne versies van Git kun je de externe branch uitchecken als een lokale branch.
git checkout <remotebranch>
Oudere versies van Git vereisen dat er een nieuwe branch wordt gemaakt op basis van de externe
.
git checkout -b <remotebranch> origin/<remotebranch>
Daarnaast kun je een nieuwe lokale branch uitchecken en deze terugzetten naar de laatste commit van de externe branch.
git checkout -b <branchname>
git reset --hard origin/<branchname>
Vrijstaande HEADS
Nu we de drie belangrijkste toepassingen van git checkout
op branches hebben gezien, is het belangrijk om de status 'vrijstaande HEAD'
te bespreken. De HEAD
is Gits manier is om naar de huidige momentopname te verwijzen. Onder de motorkap werkt de opdracht git checkout
eenvoudig de HEAD
bij, zodat deze naar de opgegeven branch of commit verwijst. Als er naar een branch wordt verwezen, is dat geen probleem voor Git, maar als je een commit uitcheckt, wordt er overgeschakeld naar de status vrijstaande HEAD
.
Dit is een waarschuwing om je te laten weten dat alles wat je doet 'los' staat van de rest van de ontwikkeling van je project. Als je zou beginnen met het ontwikkelen van een functie terwijl de HEAD
vrijstaat, is er geen enkele branch die je toestaat om terug te komen. Wanneer je onvermijdelijk een andere branch uitcheckt (bijvoorbeeld om je functie in te voegen), zou er geen manier zijn om naar je functie te verwijzen:
Het punt is dat je ontwikkeling altijd moet plaatsvinden op een branch — nooit op een vrijstaande HEAD
. Dit zorgt ervoor dat je altijd een verwijzing hebt naar je nieuwe commits. Als je echter alleen maar naar een oude commit kijkt, maakt het niet echt uit of je in een vrijstaande HEAD
hebt of niet.
Samenvatting
Op deze pagina ging het over het gebruik van de opdracht git checkout
bij het wijzigen van branches. Samenvattend verandert git checkout
het doel van de ref HEAD
wanneer de opdracht wordt gebruikt voor branches. Het kan worden gebruikt om branches aan te maken, van branch te wisselen en externe branches uit te checken. De opdracht git checkout
is een essentieel hulpmiddel voor het gewone gebruik van Git. De opdracht is een tegenhanger van git merge. De opdrachten git checkout
en git merge
zijn cruciale hulpmiddelen om git workflows mogelijk te maken.
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.