Cursusinhoud
GitHub Fundamentals
GitHub Fundamentals
Basisprincipes van Rebasen
Een commit maken op de main branch
Begin met het maken van een commit direct in de remote main
branch door het bestand README.md
in de remote repository te bewerken. Hierdoor zullen de main
branch en de feature/payment
branch een uiteenlopende commitgeschiedenis hebben.
Hier is de regel die aan het bestand is toegevoegd:
Hier is het bijbehorende commitbericht:
Begrip van Rebasen
Zoals eerder vermeld in het vorige hoofdstuk, kan en moet de feature-branch, zodra deze is beoordeeld en getest, worden samengevoegd met de main
-branch. Tot nu toe hebben we hiervoor alleen het commando git merge
gebruikt. Een alternatieve methode is echter het gebruik van het commando git rebase
.
Rebasen is het proces waarbij een reeks commits wordt verplaatst of gecombineerd naar een nieuwe basiscommit. Dit gebeurt door de wijzigingen van de ene branch opnieuw toe te passen op een andere branch, wat resulteert in een lineaire commitgeschiedenis.
Wanneer we een branch aanmaken, houdt Git de laatste commit op beide branches bij. Als slechts één branch nieuwe wijzigingen heeft, kan Git deze wijzigingen direct toepassen (fast-forward). Maar als beide branches nieuwe wijzigingen bevatten, maakt Git een nieuwe merge commit aan, wat resulteert in een driewegmerge.
Hier ziet u hoe een driewegmerge eruit zou zien in ons geval, waarbij C4 de laatste commit was op de feature/payment
-branch vóór het samenvoegen:
Echter, three-way merges kunnen het debuggen bemoeilijken vanwege de gesplitste, niet-lineaire geschiedenis. Door te rebasen veranderen we de basis van onze commits en spelen we deze opnieuw af bovenop de nieuwe basis, waardoor Git een fast-forward merge kan uitvoeren en een lineaire geschiedenis behoudt.
Hier is een animatie om te illustreren hoe rebasen in ons geval kan worden uitgevoerd (de commit-identificaties komen hier niet overeen met de echte):
Wanneer je een branch rebase't, ben je in feite de geschiedenis ervan aan het herschrijven. Dit betekent dat de oude commits worden vervangen door nieuwe, die verschillende identificaties (hash-sommen) hebben omdat ze gebaseerd zijn op andere snapshots van de code. Zoals getoond in de bovenstaande animatie, is de identificatie van de commit op de feature/payment
branch veranderd na het rebasen.
Bedankt voor je feedback!