Close

git commit

De opdracht git commit maakt een momentopname van de wijzigingen die het project op dit moment heeft gestaged. Gecommitte momentopnamen kunnen worden beschouwd als 'veilige' versies van een project; Git zal ze nooit wijzigen, tenzij je daar expliciet om vraagt. Voordat git commit wordt uitgevoerd, wordt de opdracht git add gebruikt om wijzigingen in het project te promoten of te 'stagen' die in een commit worden opgeslagen. Deze twee opdrachten git commit en git add zijn twee van de meest gebruikte opdrachten.


Git commit vs. SVN commit


Hoewel ze dezelfde naam hebben, lijkt git commit in niets op svn commit. Deze gedeelde term kan verwarrend zijn voor nieuwkomers op Git met een svn-achtergrond, en het is belangrijk om het verschil te benadrukken. Git commit vergelijken met svn commit is een vergelijking maken van een gecentraliseerd applicatiemodel (svn) met een gedistribueerd applicatiemodel (Git). In SVN pusht een commit wijzigingen van de lokale SVN-client naar een externe gecentraliseerde, gedeelde SVN-repository. In Git worden repository's gedistribueerd, momentopnamen worden toegewezen aan de lokale repository, en dit vereist absoluut geen interactie met andere Git-repository's. Git-commits kunnen later naar willekeurige externe repository's worden gestuurd.

Hoe het werkt


Op hoog niveau kan Git worden gezien als een tool voor tijdlijnbeheer. Commits zijn de belangrijkste bouwstenen van een Git-projecttijdlijn. Commits kunnen worden gezien als momentopnamen of mijlpalen op de tijdlijn van een Git-project. Commits worden aangemaakt met de opdracht git commit om de status van een project op dat moment vast te leggen. Git-momentopnamen worden altijd toegewezen aan de lokale repository. Dit is fundamenteel anders dan SVN, waarbij de werkkopie wordt opgeslagen in de centrale repository. Git dwingt je daarentegen pas tot interactie met de centrale repository als je er klaar voor bent. Net zoals de staging-omgeving een buffer is tussen de werkmap en de projectgeschiedenis, is de lokale repository van elke ontwikkelaar een buffer tussen zijn bijdragen en de centrale repository.

Hierdoor verandert het basisontwikkelingsmodel voor Git-gebruikers. In plaats van iets te veranderen en deze wijziging rechtstreeks naar de centrale repo te committen, hebben Git-ontwikkelaars de mogelijkheid om commits te verzamelen in hun lokale repo. Dit heeft veel voordelen ten opzichte van samenwerking in SVN-stijl: het is eenvoudiger om een functie op te splitsen in atomische commits, gerelateerde commits gegroepeerd te houden en de lokale geschiedenis op te schonen voordat deze in de centrale repository wordt gepubliceerd. Ook kunnen ontwikkelaars in een geïsoleerde omgeving werken, waardoor de integratie wordt uitgesteld tot ze zich op een punt bevinden dat ze geschikt vinden om samen te voegen met andere gebruikers. Hoewel isolatie en uitgestelde integratie afzonderlijk voordelig zijn, is het in het belang van een team om regelmatig en in kleine eenheden te integreren. Voor meer informatie over de best practices voor samenwerking met Git-teams, kun je lezen hoe teams hun Git-workflow structureren.

Git-branch
gerelateerd materiaal

Git-branch

Logo Bitbucket
Oplossing bekijken

Git leren met Bitbucket Cloud

Momentopnamen, geen verschillen


Afgezien van het praktische onderscheid tussen SVN en Git volgt hun onderliggende implementatie ook totaal uiteenlopende ontwerpfilosofieën. Waar SVN de verschillen in een bestand bijhoudt, is het versiebeheermodel van Git gebaseerd op momentopnamen. Een SVN-commit bestaat bijvoorbeeld uit een diff vergeleken met het oorspronkelijke bestand dat aan de repository is toegevoegd. Git daarentegen registreert in elke commit de volledige inhoud van elk bestand.

Git-tutorial: momentopnamen, geen verschillen

Dit maakt veel Git-bewerkingen veel sneller dan SVN, aangezien een bepaalde versie van een bestand niet uit de verschillende diffs 'samengesteld' hoeft te worden. De volledige revisie van elk bestand is onmiddellijk beschikbaar in de interne database van Git.

Het momentopnamemodel van Git heeft een verstrekkende invloed op vrijwel elk aspect van het versiebeheermodel en heeft invloed op alles, van de tools voor vertakking en samenvoeging tot de workflows voor samenwerking.

Gemeenschappelijke opties


git commit

De gestagede momentopname committen. Hiermee wordt een teksteditor gestart waarin je wordt gevraagd om een commitbericht. Nadat je een bericht hebt ingevoerd, sla je het bestand op en sluit je de editor om de daadwerkelijke commit aan te maken.

git commit -a

Maak een momentopname van alle wijzigingen in de werkmap. Dit omvat alleen wijzigingen in bijgehouden bestanden (die op een bepaald moment in hun geschiedenis zijn toegevoegd met git add).

git commit -m "commit message"

Een sneltoets die onmiddellijk een commit aanmaakt met een doorgegeven commitbericht. git commit opent standaard de lokaal geconfigureerde teksteditor en vraagt om een commitbericht in te voeren. Als je de optie -m selecteert, wordt er een inline bericht getoond in plaats van de opdracht voor de tekstbewerker.

git commit -am "commit message"

Een sneltoets voor de power user die de opties -a en -m combineert. Deze combinatie maakt direct een commit aan van alle gestagede wijzigingen en vereist een inline commitbericht.

git commit --amend

Deze optie voegt nog een niveau van functionaliteit toe aan de opdracht commit. Als je deze optie opgeeft, wordt de laatste commit gewijzigd. In plaats van een nieuwe commit aan te maken, worden gestagede wijzigingen toegevoegd aan de vorige commit. Met deze opdracht wordt de geconfigureerde teksteditor geopend van het systeem en wordt er gevraagd om het eerder gespecificeerde commitbericht te wijzigen.

Voorbeelden


Wijzigingen opslaan met een commit

In het volgende voorbeeld wordt ervan uitgegaan dat je bepaalde inhoud hebt bewerkt in een bestand met de naam hello.py in de huidige branch en dat je klaar bent om deze toe te voegen aan de projectgeschiedenis. Eerst moet je het bestand stagen met git add, daarna kun je de gestagede momentopname comitten.

git add hello.py

Deze opdracht voegt hello.py toe aan de Git staging-omgeving. We kunnen het resultaat van deze actie bekijken met de opdracht git status.

git status
On branch main
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
   new file: hello.py

De groene uitvoer van het nieuwe bestand: hello.py geeft aan dat hello.py wordt opgeslagen bij de volgende commit. De commit wordt aangemaakt door het volgende uit te voeren:

git commit

Hiermee wordt een teksteditor geopend (aanpasbaar via git config) waarin wordt gevraagd om een commit-logbericht, samen met een lijst van wat er wordt gecommit:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch main
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
#modified: hello.py

Git eist niet dat commitberichten een specifieke opmaak hebben, maar de gangbare indeling is om de volledige commit op de eerste regel samen te vatten in minder dan 50 tekens, waarna een regel leeg wordt gelaten en vervolgens een gedetailleerde uitleg van wat er is gewijzigd. Bijvoorbeeld:

Change the message displayed by hello.py

- Update the sayHello() function to output the user's name
- Change the sayGoodbye() function to a friendlier message

Het is gebruikelijk om de eerste regel van een commitbericht als onderwerp te gebruiken, vergelijkbaar met een e-mail. De rest van het logbericht wordt beschouwd als de hoofdtekst en wordt gebruikt om de details van de changeset van de commit door te geven. Let op dat veel ontwikkelaars ook graag de tegenwoordige tijd gebruiken in hun commitberichten. Daardoor lijken ze meer op acties in de repository, waardoor veel handelingen voor het herschrijven van de geschiedenis intuïtiever worden.

Hoe kan ik een commit bijwerken (wijzigen)


We gaan verder met het bovenstaande voorbeeld van hello.py. Laten we hello.py verder bijwerken en het volgende uitvoeren:

git add hello.py
git commit --amend

Hiermee wordt opnieuw de geconfigureerde teksteditor geopend. Deze keer wordt deze echter vooraf ingevuld met het commitbericht dat we eerder hebben ingevoerd. Dit geeft aan dat we geen nieuwe commit aanmaken, maar de recentste bewerken.

Samenvatting


De opdracht git commit is een van de belangrijkste kernfuncties van Git. Voorafgaand gebruik van de opdracht git add is nodig om de wijzigingen te selecteren die gestaged zullen worden voor de volgende commit. Vervolgens wordt git commit gebruikt om een momentopname te maken van de gestagede wijzigingen langs een tijdlijn van de Git-projectgeschiedenis. Meer informatie over het gebruik van git add vind je op de bijbehorende pagina. De opdracht git status kan gebruikt worden om de status van de staging-omgeving en de lopende commit te verkennen.

De commit-modellen van SVN en Git verschillen aanzienlijk, maar worden vaak verward vanwege de gedeelde terminologie. Als je naar Git overstapt en persoonlijk ervaring hebt met SVN, is het goed om te weten dat commits in Git goedkoop zijn en veelvuldig gebruikt moeten worden. Waar SVN-commits een dure actie zijn waarbij een aanvraag op afstand wordt gedaan, worden Git-commits lokaal gedaan en met een efficiënter algoritme.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Mensen die samenwerken met een muur vol tools

Bitbucket-blog

Toelichting DevOps

DevOps-leertraject

Demo Den Feature-demo's met Atlassian-experts

Hoe Bitbucket Cloud werkt met Atlassian Open DevOps

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up