Sessie 12: Coach-notities
Doel van deze sessie
Aan het einde van deze sessie kan een ninja:
- Uitleggen wat een branch is en waarom je er één zou gebruiken.
- Een branch aanmaken (
git branch/git switch -c), ernaartoe switchen, en terug naarmaster. - Commits maken op een branch zonder
masterte beïnvloeden. - Een branch mergen in
mastermetgit merge. - Een eenvoudig merge conflict herkennen en oplossen.
- Een overbodige branch verwijderen met
git branch -d.
Wat niet verwacht wordt: remote branches, pull requests, GitHub-integratie. Die komen in sessies 13 tot 15.
Voorbereiding (30 min vóór de sessie)
- Repo klaarzetten op projector. Gebruik het project van sessie 11 of maak een demo-repo met 2 tot 3 commits op
master. Je moet kunnen switchen, branchen en mergen tijdens de demo. - Merge conflict voorbereiden. De merge conflict demo (Stap 5) is het lastigste deel. Loop hem zelf twee keer door. Het visuele van
<<<<<<< HEADen=======moet je helder kunnen uitleggen. - Terminal op projector met groot lettertype. CTRL+Plus voor de zekerheid.
Tijdsindeling (3 uur)
| Tijd | Activiteit |
|---|---|
| 0:00 tot 0:10 | Herhaling sessie 11: commits, log, status. Wat was er ook alweer? |
| 0:10 tot 0:30 | Projector: wat is een branch? Demo: branch maken, switchen, bestanden zien verdwijnen |
| 0:30 tot 1:00 | Zelfstandig: branch aanmaken, bestanden toevoegen, switchen, mergen |
| 1:00 tot 1:15 | Pauze |
| 1:15 tot 1:45 | Projector: merge conflicts. Wat zijn het, hoe zien ze eruit, hoe los je ze op? |
| 1:45 tot 2:30 | Zelfstandig: merge conflicts maken en oplossen, branches opruimen |
| 2:30 tot 2:45 | Showcase: toon je branches, log, en een opgelost conflict |
| 2:45 tot 3:00 | Cliffhanger, take-home |
Veelgestelde vragen
“Waarom heet de hoofdbranch master?”
De hoofdbranch heet in onze sessies master. Dat was jarenlang de standaard in Git. Sinds 2020 gebruikt GitHub standaard main, een neutraler woord. Veel nieuwe projecten gebruiken main, oudere projecten master. Hetzelfde concept, andere naam. In deze cursus houden we het op master, maar als je online main tegenkomt: dat is exact hetzelfde.
“Moet ik élke wijziging op een aparte branch doen?”
Nee. Kleine fixes (typ0’s, commentaar) kun je direct op master doen. Branches zijn voor dingen die meerdere commits nodig hebben of risicovol zijn.
“Hoe weet ik op welke branch ik sta?”
git status toont het bovenaan. git branch toont alle branches met een sterretje naast de actieve. Maak er een gewoonte van om dit te checken voor je begint te werken, zodat je voorkomt dat je op de verkeerde branch code schrijft.
“Ik ben commits kwijt na het switchen!” Je commits zijn niet kwijt: ze staan op de andere branch. Switch terug en ze zijn er weer. Dit is precies de bedoeling: branches isoleren werk van elkaar.
“Git zegt ‘Already up to date’ bij het mergen”
Dat betekent dat er niks te mergen valt, want de branch die je probeert te mergen heeft geen nieuwe commits. Check met git log of je wel commits hebt gemaakt op de juiste branch.
Merge conflicts uitleggen (visueel)
Dit is het moeilijkste concept van de sessie. Gebruik een analogie:
“Stel: jij en je vriend schrijven allebei hetzelfde huiswerk. Jij hebt vraag 3 beantwoord met ‘42’. Je vriend schreef ‘37’. De leraar krijgt beide versies en zegt: ‘Ik weet niet welke het juiste antwoord is. Jullie moeten het samen uitzoeken.’
<<<<<<< HEADis jouw versie.=======is de scheidslijn.>>>>>>> andere-branchis je vriends versie. Git zegt: ‘Hier zijn beide antwoorden, kies maar.’ Jij verwijdert de markers en kiest het juiste antwoord. Dangit addengit commit, en klaar.”
Laat de markers letterlijk zien op de projector. Het ziet er eng uit (<<<<<<<, >>>>>>>, =======) maar het is gewoon een keuzemenu.
Hints voor Stretch en Expert
Stretch: git log --graph:
git log --graph --oneline --all toont een visuele boom van je branches. Handig als je niet meer weet hoe branches in elkaar zitten.
Expert: branch overschrijven met git merge:
Als je git merge feature-branch doet terwijl master geen nieuwe commits heeft sinds de branch is afgesplitst, doet Git een fast-forward: het verplaatst de master-pointer gewoon naar de laatste commit van de feature-branch. Geen merge-commit nodig. Als master wél nieuwe commits heeft, maakt Git een echte merge-commit aan.
Cliffhanger-script
“Nu kun je twee versies van je code tegelijk hebben. Maar alles staat nog steeds alleen op jouw laptop. Volgende keer gaat je code de wijde wereld in. We maken een GitHub-account, zetten je repository online, en, het coolste, we halen code van andere mensen binnen. Jouw game. Online. Voor iedereen.”
Waarom deze sessie nú?
Sessie 11 gaf ninjas één tijdlijn. Deze sessie leert ze splitsen en samenvoegen. Dit is het kernconcept van Git: niet-lineaire ontwikkeling.
Zonder branches:
- Je durft geen risico’s te nemen met je code.
- Samenwerken is onmogelijk.
- Je kunt niet terug naar een vorige versie zonder je huidige werk kwijt te raken.
Met branches:
- Experimenteren is veilig.
- Je kunt aan meerdere dingen tegelijk werken.
- Samenwerken wordt mogelijk (sessie 13-15 bouwen hierop voort).