Skip to content

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.

sh
git switch -c mijn-nieuwe-feature

Branch 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.

sh
git push --set-upstream origin mijn-nieuwe-feature

Of in kortere vorm:

sh
git push -u origin mijn-nieuwe-feature

Pull request maken op GitHub

  • Ga naar de repository op GitHub.
  • Klik op Pull requests in het menu bovenaan.
  • Klik op New pull request (groene knop).
  • Als base wordt er gekozen voor main. Dit is de branch waar de wijzigingen in samengevoegd moeten worden.
  • Als compare wordt 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 main uit 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 main branch te behouden (vaak aangeduid als incoming), of de wijzigingen van de eigen branch te behouden (vaak aangeduid als current), of een combinatie van beide te behouden (vaak aangeduid als both).

    Het is niet de bedoeling om zomaar te kiezen voor incoming of current of both zonder 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 . en git 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 de main branch.