GitHub - Branches en Pull Requests
INFO
In deze documentatie wordt uitgelegd hoe er met branches gewerkt kan worden in git en hoe er een pull request gemaakt kan worden op GitHub.
Inhoud
Wat zijn branches?
Een branch (Nederlands: vertakking) is een aparte "branch" van de code. Het wordt vaak gebruikt om nieuwe features te ontwikkelen, bugs op te lossen of om te experimenteren zonder dat de main branch (Nederlands: hoofdtak) beïnvloed wordt. Wanneer er een branch gemaakt wordt, wordt er een kopie gemaakt van de code op dat moment. Alle wijzigingen die daarna gedaan worden in die branch, hebben geen invloed op de main branch totdat deze samengevoegd worden. Het samenvoegen van een branch met de main branch wordt ook wel een merge genoemd.
Wat is een pull request?
Een pull request is een verzoek om wijzigingen die in een branch zijn gemaakt, samen te voegen met de main branch. Tijdens een pull request kunnen andere developers de wijzigingen bekijken, feedback geven en uiteindelijk goedkeuren voordat de wijzigingen effectief worden samengevoegd.
Branch aanmaken
Er zijn verschillende commando's die gebruikt kunnen worden om een branch aan te maken. In deze documentatie zal gewerkt worden met git switch.
Met git switch <branchnaam> kan er gewisseld worden naar een bestaande branch. Waarbij <branchnaam> de naam is van de branch waar naartoe gewisseld moet worden.
Met git switch -c <branchnaam> kan er een nieuwe branch aangemaakt (de -c staat voor create) en er meteen naartoe gewisseld worden. Waarbij <branchnaam> de naam is van de nieuwe branch.
git switch -c mijn-nieuwe-featureBranch pushen naar GitHub
Wanneer er lokaal een branch is aangemaakt, bestaat deze nog niet op GitHub. Bij het proberen pushen van een commit op een branch die nog niet op GitHub bestaat, zal er een melding verschijnen met een commando dat eenmalig uitgevoerd moet worden om de branch ook op GitHub aan te maken. Dit commando is git push --set-upstream origin <branchnaam>. Waarbij <branchnaam> de naam is van de branch die gepusht moet worden.
git push --set-upstream origin mijn-nieuwe-featureOf in kortere vorm:
git push -u origin mijn-nieuwe-featurePull request maken op GitHub
- Ga naar de repository op GitHub.
- Klik op
Pull requestsin het menu bovenaan. - Klik op
New pull request(groene knop). - Als
basewordt er gekozen voormain. Dit is de branch waar de wijzigingen in samengevoegd moeten worden. - Als
comparewordt er gekozen voor de branch waar de wijzigingen in gemaakt zijn. - Klik op
Create pull request(groene knop). - Vul een titel en beschrijving in voor de pull request.
- Klik op
Create pull request(groene knop) om de pull request aan te maken.
Op dit moment is de pull request klaargezet om samengevoegd te worden. Andere developers kunnen de wijzigingen bekijken (tab: Files changed), hier kunnen ze feedback toevoegen door middel van opmerkingen toe te voegen op specifieke regels code.
Wanneer alle feedback verwerkt is, kan de developer op de Files changed-tab rechtsboven op Submit review klikken om hier expliciet Approve (Nederlands: goedkeuren) te selecteren.
Vervolgens kan de pull request samengevoegd worden door op de groene knop Merge pull request te klikken in de Conversation-tab.
Merge conflicts
Soms kunnen er merge conflicts ontstaan. Dit gebeurt wanneer er in dezelfde regels code wijzigingen zijn aangebracht in de main branch en in de branch die samengevoegd moet worden. Git kan dan niet automatisch bepalen welke wijzigingen behouden moeten worden. In dat geval moeten deze conflicten handmatig opgelost worden door de ontwikkelaar voordat de pull request samengevoegd kan worden.
De workflow hiervoor is als volgt:
Ga lokaal naar de main branch en haal de laatste wijzigingen binnen met
git pull.Ga naar de branch die samengevoegd moet worden (
git switch <branchnaam>).Voer
git merge mainuit om de main branch samen te voegen met de huidige branch. Hierbij zullen de merge conflicts lokaal ontstaan.Open de bestanden met merge conflicts in een editor en los de conflicten op. De editors tonen meestal een mooie visualisatie van de conlflicten en bieden knoppen aan om te kiezen welke wijzigingen behouden moeten worden.
incoming/current/both
Als developer ben je verantwoordelijk voor het oplossen van de merge conflicts. Er kan gekozen worden om de wijzigingen van de
mainbranch te behouden (vaak aangeduid alsincoming), of de wijzigingen van de eigen branch te behouden (vaak aangeduid alscurrent), of een combinatie van beide te behouden (vaak aangeduid alsboth).Het is niet de bedoeling om zomaar te kiezen voor
incomingofcurrentofbothzonder te kijken naar de inhoud van de wijzigingen. Het is perfect mogelijk dat er een collega wordt bijgehaald om samen te kijken naar de merge conflicts en te beslissen welke wijzigingen behouden moeten worden.Nadat alle conflicten opgelost zijn, kunnen de wijzigingen gecommit worden met
git add .engit commit -m "Opgeloste merge conflicts".Push de wijzigingen naar GitHub met
git push. Hierdoor worden de merge conflicts ook opgelost in de pull request op GitHub en kan deze samengevoegd worden met demainbranch.