Git is een gedistribueerd versiebeheersysteem - een hulpmiddel voor het bijhouden van wijzigingen die in een set bestanden zijn aangebracht of het coördineren van werk in de loop van de tijd. Het wordt vaak gebruikt door programmeurs om veranderingen in de broncode van de software en het beste deel te coördineren; het kan worden gebruikt om alle soorten inhoud bij te houden. Het is speciaal ontworpen om alles aan te kunnen, van kleine tot grote projecten met uiterste spoed en efficiëntie. Het is uiterst flexibel, wat inhoudt dat individuen werk rechtstreeks kunnen delen tussen hun persoonlijke repository's en groepen hun workflow kunnen coördineren via een centrale repository. Het maakt het eenvoudigweg mogelijk dat twee ontwikkelaars op twee verschillende locaties zelfstandig wijzigingen kunnen maken en registreren, allemaal zonder een centrale repository.
Samenvoegen is een veelgebruikte praktijk in Git om veranderingen van de ene branche naar de andere te integreren. Git-samenvoeging is een opdracht die wijzigingen aanbrengt op een andere locatie. Het stelt ontwikkelaars in staat om hun onafhankelijke coderegels gemaakt door de Git branch te nemen en ze te integreren in een enkele branch. Dit verandert alleen de doelvertakking terwijl de geschiedenis van de bronkolom overblijft. Git rebase is nog een ander commando dat in principe wordt gebruikt voor hetzelfde doel, behalve dat het het heel anders doet. Ze doen allebei hetzelfde - nemen commits van de ene branch naar de andere - maar het verschil ligt in hoe ze het doen. We lichten enkele belangrijke onderscheidende punten toe die de twee met elkaar vergelijken.
Git-samenvoeging is een opdracht die twee of meer takken van de vastleggingsgeschiedenis verenigt. Bij een samenvoeging worden vaak slechts twee takken samengevoegd, hoewel Git tegelijkertijd het samenvoegen van drie, vier of meer takken ondersteunt. Git merge wordt door Git pull gebruikt om wijzigingen van de ene branch naar de andere of vanuit een andere repository op te nemen. Samenvoegen moet plaatsvinden binnen een enkele repository, wat betekent dat alle takken die moeten worden samengevoegd, in dezelfde repository aanwezig moeten zijn. Samenvoegingssituaties zijn meestal het resultaat van twee of meer gebruikers die de gemeenschappelijke code proberen bij te werken. Meestal voegt een gebruiker een branch samen in een andere branch in zijn lokale repository in een lokale omgeving. Git samenvoeging integreert specifiek de inhoud van een bronnentak met een doelvertakking. De doelvertakking is gewijzigd, terwijl de bronnentak nog steeds is.
Git-rebase is nog een alternatief voor samenvoegen dat wordt gebruikt om een andere branch te integreren met de branch waar je momenteel werkt, behalve dat het een lineaire commit-geschiedenis bijhoudt. Het doel van Git rebase is om een branch van de ene naar de andere locatie te verplaatsen. Omdat commits onveranderlijk zijn, kunnen ze niet worden verplaatst, dus dit betekent het maken van nieuwe commits met dezelfde changesets en metadata. Een rebase verandert fundamenteel het idee van wanneer en waar een reeks commits werd ontwikkeld, wat ertoe leidt dat sommige aspecten van de ontwikkelingsgeschiedenis verloren gaan. Dit betekent dat de oorspronkelijke commit waarop de ontwikkeling oorspronkelijk was gebaseerd, zal worden gewijzigd. Het bevat effectief alle nieuwe commits in de hoofdtak door de geschiedenis te herschrijven. Als gevolg hiervan maakt het nieuwe commits voor elke commit in de originele branch.
- Hoewel zowel samenvoegen als rebasen de meest gebruikelijke manieren zijn om veranderingen in Git te integreren en ze hetzelfde doel dienen - om meerdere vertakkingen tot één te combineren - ligt het verschil in de manier waarop ze dit bereiken. Git merge integreert de inhoud van een bronnentakt met een doeltak, met behoud van de voorgeschiedenis van elke commit-geschiedenis, terwijl Git-rebase alle nieuwe commits in de mastertak incorporeert door de geschiedenis te herschrijven door nieuwe commits te maken voor elke commit in de bronnentak.
- Met Git-samenvoeging schakelt u eerst naar de te samen te voegen vertakking en gebruikt u vervolgens de opdracht Samenvoegen om een vertakking te selecteren om in te voegen. Gegeven dat een vertakking verwijst naar een commit en dat een commit de granulariteit is waarmee u wijzigingen associeert, het samenvoegen opdracht samenvoegt op het branch- of commit-niveau. Rebase is aan de andere kant een beetje anders. Eerst selecteer je een branch om te rebasen en gebruik dan de rebase-opdracht om te selecteren waar je het wilt plaatsen.
- Bij samenvoegen wordt een nieuwe commit gemaakt die de samenvoeging tussen twee branches vertegenwoordigt. Het integreert veranderingen van verschillende parallelle lijnen van ontwikkeling (takken) samen door een samenvoeg-commit te creëren. Het doel is om twee of meer takken samen te voegen, inclusief alle veranderingen sinds het punt van divergentie in de huidige tak. Fast-forward is het standaard samenvoeggedrag in Git. Rebasen, aan de andere kant, verandert individuele commits door projectgeschiedenis te herschrijven door nieuwe commits te creëren voor elke commit in de originele branch, wat op zijn beurt resulteert in lineaire geschiedenis zonder divergerende branches..
- Git samenvoegen wijzigt de geschiedenis niet, terwijl de context van de branch behouden blijft, wat betekent dat de bestaande branches op geen enkele manier worden gewijzigd. Er wordt een nieuwe commit gemaakt (tenzij het een snelle samenvoeging betreft), maar de commits blijven bereikbaar vanuit de branch. Git rebase, aan de andere kant, stroomlijnt een potentieel complexe geschiedenis. Commits worden herschreven, oude versies worden vergeten en de DAG van revisies wordt gewijzigd. Commits zijn niet langer bereikbaar met rebase, wat betekent dat je niet langer gepubliceerde branches kunt rebasen.
In een notendop, beide samenvoegen en rebasen zijn de twee manieren om veranderingen in Git te integreren, maar ze verschillen in hoe ze het doen. Samenvoegen is een eenstapsbewerking met één plaats om conflicten op te lossen en de commits die vanuit de branche bereikbaar waren, blijven bereikbaar. Rebase, aan de andere kant, past elke commit afzonderlijk opnieuw toe door de geschiedenis te herschrijven door nieuwe commits te maken voor elke commit in de bronkolom. Wat ooit bereikbaar was, is dus niet meer bereikbaar. Een rebase verandert fundamenteel het idee van wanneer en waar een reeks commits werd ontwikkeld.