Ga naar inhoud

Git branches

Je gaat nu een stap verder richting samenwerken in een team. Hiervoor begin je met git branches.

Sommigen hebben daar in het eerste semester ook al mee geëxperimenteerd, maar vaak met wisselend succes.

Hoe werken git branches?

In een git repository wijzen commits steeds naar "de vorige commit" waar ze op verder bouwen.

Visueel kan je dat in een Git graph weergeven.

%%{init: { 'themeVariables': {'git0': ' #3498db ', 'git1': ' #d4ac0d', 'commitLabelFontSize': '12px'}, 'gitGraph': {'rotateCommitLabel': false} } }%%
gitGraph TB:
  commit id: "stap 1"
  commit id: "stap 2"
  commit id: "stap 3"

Als je de gewone Git workflow gebruikt wil je deze lineaire lijn vasthouden.

Je hebt gezien dat als je met merge conflicten te maken krijgt, je die lokaal oplost. Als je een git pull hebt gedaan, zijn jouw lokale main en die op GitLab misschien verschillend. Je zorgt dat je de problemen op jouw machine oplost, voordat je een git push doet.

%%{init: { 'themeVariables': {'git0': ' #3498db ', 'git1': ' #d4ac0d', 'commitLabelFontSize': '12px'}, 'gitGraph': {'rotateCommitLabel': false} } }%%
gitGraph TB:
  commit id: "stap 1"
  commit id: "stap 2"
  commit id: "stap 3"
  branch "origin/main"
  checkout main
  commit id: "mijn bijdrage"
  checkout "origin/main"
  commit id: "via pull binnengehaald"
  checkout main
  merge "origin/main" id: "merge conflicten opgelost"

De main branch

Zoals je ziet gebeurt alles in dit geval op main: dat is de hoofdbranch in de repository.

De main branch wordt normaliter gebruikt voor de versie die "af" is: je kan die op elk moment laten zien aan de PO, en alles werkt.

Issue branches

Je kan bij een commit ook een aftakking maken: een branch. Daarmee kan je apart wijzigingen bijhouden die je nog niet op de main branch wilt zetten, omdat het nog niet af is.

Als je bijvoorbeeld aan de slag gaat met een issue, kan je eerst een aparte issue branch maken. Je kan dan je wijzigingen in stapjes bijhouden, en delen met je teamgenoten.

%%{init: { 'themeVariables': {'git0': ' #3498db ', 'git1': ' #d4ac0d', 'commitLabelFontSize': '12px'}, 'gitGraph': {'rotateCommitLabel': false} } }%%
gitGraph TB:
  commit id: "stap 1"
  commit id: "stap 2"
  commit id: "stap 3"
  branch issue-123
  commit id: "mijn stap 1"
  commit id: "mijn stap 2"

Misschien heeft een teamgenoot intussen een issue af en hebben jullie die naar de main branch gemerged. De branches gaan dan uit elkaar lopen.

%%{init: { 'themeVariables': {'git0': ' #3498db ', 'git1': ' #d4ac0d', 'commitLabelFontSize': '12px'}, 'gitGraph': {'rotateCommitLabel': false} } }%%
gitGraph TB:
  commit id: "stap 1"
  commit id: "stap 2"
  commit id: "stap 3"
  branch issue-123
  commit id: "mijn stap 1"
  commit id: "mijn stap 2"
  checkout main
  commit id: "issue 27 af"
  checkout issue-123
  commit id: "mijn stap 3"

Als jouw werk af is, en de team review is gedaan, kan je ook jouw werk op de main branch mergen. Daarna is de aparte issue branch niet meer nodig.

Merge conflicts

Uiteraard kan je hier ook weer merge conflicts tegenkomen. En ook nu los je die op je eigen machine op voordat je pusht.

%%{init: { 'themeVariables': {'git0': ' #3498db ', 'git1': ' #d4ac0d', 'commitLabelFontSize': '12px'}, 'gitGraph': {'rotateCommitLabel': false} } }%%
gitGraph TB:
  commit id: "stap 1"
  commit id: "stap 2"
  commit id: "stap 3"
  branch issue-123
  commit id: "mijn stap 1"
  commit id: "mijn stap 2"
  checkout main
  commit id: "issue 27 af"
  checkout issue-123
  commit id: "mijn stap 3"
  checkout main
  merge issue-123 id: "issue 123 af"

Je kan dus zo'n issue branch, en de merge van jouw branch naar de main branch helemaal met git doen, op je eigen laptop.

Maar je gaat dat in de volgende stap anders doen: met je team, via GitLab.