Git branch
Een van de krachtige features in Git is het werken met Branches. Een branch kun je zien als aftakking van je applicatie waarin een bepaalde feature wordt ontwikkeld. Het hangt ook af van welk werk-model je hanteert, omdat in het 'distributed' model iedere ontwikkelaar zijn eigen branch heeft en wordt er gewerkt met zogeheten 'pull requests', zoals op Github.
Branches gebruiken om nieuwe features te ontwikkelen
Een ander belangrijk voordeel van het gebruiken van branches is dat je bijvoorbeeld een test kan maken met een nieuwe versie van een framework. Stel je gebruikt nu PhpMailer in je hele applicatie om e-mail berichten te verzenden, en je wilt dit uitfaseren en ombouwen naar SwiftMailer. Dan besef je dat dit natuurlijk een behoorlijk groot process is en je niet de normale gang van zaken (op de master bv) in de weg wilt zetten. Je kunt dan een aparte branch maken (die je bijvoorbeeld 'swiftmailer' noemt) en daarin alles ombouwen naar de nieuwe library. Wanneer je klaar bent doe je vanuit de master een merge of rebase met deze nieuwe branch.
Lokaal of remote
Met branches werk je altijd lokaal. Er is in Git (zover ik weet) geen mogelijkheid om direct op de remote branch te werken. Wanneer je dus een branch aanmaakt staat deze alleen nog lokaal. Je moet de branch pushen om hem ook remote beschikbaar te maken en je code te kunnen delen met andere ontwikkelaars. Je branch pushen is niet altijd noodzakelijk wanneer je bijvoorbeeld alleen zelf aan de branch gaat ontwikkelen.
Branch aanmaken
Wanneer je een nieuwe branch aanmaakt in git doe je dat als volgt:
Nu heb je (alleen) lokaal de 'swiftmailer' branch aangemaakt op basis van de branch waar je nu in zit. Weet je niet in welke branch je zit? Met het commando:
Zoals je hierboven kunt zien zit ik momenteel op de master branch. Wanneer je dus "git branch swiftmailer" uitvoert maak je dus een branch op basis van de master. Je gaat vanaf dan wel afwijken van de master en wijzigingen in de master branch zullen niet automatisch doorgevoerd worden in de swiftmailer branch. In de meeste gevallen is dit ook gewenst. Wanneer je wel wenst dat de swiftmailer branch de wijzigingen op de master bijhoudt dan geef je bij het aanmaken de optie --track me:
Wanneer je een git pull doet, zullen de wijzingen gemerged worden met de switftmailer branch. In meeste gevallen is het dan fijner om "git pull --rebase" te doen om de branch timeline overzichtelijk te houden.
Branch remote beschikbaar maken
Wanneer je dus een branch aangemaakt hebt staat deze alleen nog lokaal. Om je branch / code te delen met je collega's moet je deze 'pushen' om de branch remote beschikbaar te maken. Wanneer je de eerste keer je wijzingen in je lokale branch gaat pushen doe je het volgende:
Wanneer je dit gedaan hebt zul je in de response zien dat Git een nieuwe branch heeft aangemaakt. Het meegeven van 'origin swiftmailer' hoeft alleen de eerste keer hierna kun je gewoon 'git push' doen als je commits naar de git repository wilt versturen.
Branch verwijderen
Het kan zijn dat je een bepaalde branch al gemerged hebt in de master of dat een bepaalde feature/experiment niet meer nodig is. Het heeft dan geen zit meer om de branch nog te bewaren. Een branch verwijderen doe je als volgt:
Wanneer de branch ook remote stond en je hem ook remote wilt verwijderen:
Let op de dubbele punt, deze is belangrijk bij het verwijderen.
Branches opvragen
Wanneer je wilt weten welke branches er remote allemaal zijn, welke je nu uitgechecked hebt of welke branches bij je lokaal staan voer je het volgende commando uit:
Dit commando geeft je een volledige lijst van alle branches zowel lokaal als remote, en de branch met het sterretje ervoor is de branch waar je momenteel op zit. Een voorbeeld:
Je ziet aan bovenstaand voorbeeld dat alle remote branches ook lokaal beschikbaar zijn.
Be aware!
Een fout die ik zelf weleens gemaakt heb is dat ik bijvoorbeeld in de swiftmailer branch uitgechecked was en het volgende commando uitvoerde:
Het gevolg was dat ik mijn branch ging mergen in de master terwijl deze nog niet klaar was. Omdat dit met 'push' meteen remote staat moet je met "git revert --mainline" gaan spelen om het terug te draaien. Wanneer je een merge conflict hebt, dan heb je geluk en kun je nog "git reset --soft ...." doen om ervoor te zorgen dat de merge terug gedraait wordt. Het is daarom een wijze les om alleen bij het aanmaken van de branch de eerste keer "origin swiftmailer" erachter te zetten in de swiftmailer branch en in het vervolg alleen "git push" te doen.
Tot slot..
Hopelijk heb je hiermee een goede indruk gegeven wat de basis mogelijkheden zijn in het werken met branches. Er is echter nog veel meer mogelijk en zijn er vaak ook nog meerdere opties die je mee kunt geven om bepaalde taken te verrichten. Op internet en in de help is hier veel over te vinden.
Inhoudsopgave
- Git clone of git init
- Git reset
- Git revert
- Git branch
- Git diff
- Git checkout
- Git cherry-pick
- Git merge en git rebase
- Git pull
- Git tag