Committen — het vastleggen van wijzigingen in het versiebeheersysteem Git, waarmee een opslagpunt in de projectgeschiedenis wordt gecreëerd. Elke commit bevat een hash, auteur, datum en beschrijving van wijzigingen. Volgens GitHub Octoverse 2024 worden er dagelijks wereldwijd meer dan 50 miljoen commits gemaakt. Commit — de basiseenheid van versiebeheer, zonder welke moderne softwareontwikkeling ondenkbaar is.
Belangrijkste
Een commit in Git is een object dat de status van projectbestanden op een bepaald moment opslaat. Elke commit bevat een snapshot van alle gevolgde bestanden, een verwijzing naar de parent-commit en metadata. In tegenstelling tot andere versiebeheersystemen gebruikt Git content-addressable storage — elk object wordt geïdentificeerd door de SHA-1 hash van de inhoud.
Wanneer een ontwikkelaar wijzigingen commit, maakt Git een commit-object aan dat bevat: tree-object (bestandsstructuur), parent-commit hash, auteur, committer, datum en bericht. Dit object is onveranderlijk — na aanmaak kan een commit niet worden gewijzigd zonder de hash te veranderen. Juist deze onveranderlijkheid garandeert de integriteit van de projectgeschiedenis.
# Wijzigingen klaarzetten en committen
git add index.html style.css
git commit -m "Fix responsive layout on mobile devices"
# Commitdetails bekijken
git log --oneline -3
git show HEAD
# Alle wijzigingen klaarzetten en in één stap committen
git commit -a -m "Update dependencies to latest versions"
Commits vormen een gerichte acyclische graaf (DAG), waarbij elke nieuwe commit naar de vorige verwijst. Dit maakt navigatie door de geschiedenis, het terugdraaien van wijzigingen en analyse van de codebase-evolutie mogelijk. Begrip van de Git DAG-structuur — de basis voor geavanceerd werk met commits.
Het commitproces in Git bestaat uit twee fasen: het toevoegen van wijzigingen aan de staging area (index) en het aanmaken van de commit. De staging area stelt de ontwikkelaar in staat te selecteren welke wijzigingen in de commit worden opgenomen, zelfs als er veel bestanden zijn gewijzigd in de werkdirectory.
De atomiciteitsregel — het kernprincipe van een goede commit. Elke commit moet één logische wijziging bevatten. Als een ontwikkelaar een bug repareert en code refactort — zijn dit twee verschillende commits. Atomaire commits vereenvoudigen code-review, het terugdraaien van wijzigingen en geschiedenisanalyse.
Voor het committen is het goed te controleren: of er debug-uitvoer, uitgecommentarieerde blokken of toevallige wijzigingen in de code zijn achtergebleven. Hiervoor wordt het commando git diff --cached gebruikt, dat toont wat er precies in de commit komt. Extra controle via git status geeft de lijst van bestanden in de staging area.
Het commitbericht is de documentatie van de wijziging voor toekomstige ontwikkelaars. Een goed bericht beantwoordt de vragen: wat is gewijzigd en waarom. De Conventional Commits-conventie (Angular team, 2016) is de standaard geworden voor veel projecten en definieert het formaat: type(gebied): beschrijving.
| Type | Doel | Voorbeeld |
|---|---|---|
| feat | nieuwe functionaliteit | feat(api): add user registration endpoint |
| fix | bugfix | fix(auth): resolve token refresh issue |
| refactor | refactoring zonder gedragsverandering | refactor(core): extract payment validator |
| docs | documentatie | docs(readme): update installation guide |
| test | toevoegen tests | test(cart): add unit tests for checkout |
Een goed commitbericht bestaat uit een kop (tot 50 tekens) en een body (optioneel, tot 72 tekens per regel). De kop wordt in de gebiedende wijs geschreven: „Add” niet „Added” of „Adds”. Hoofdletter en punt aan het einde van de kop worden niet gebruikt — dit is de internationale Git-conventie.
Slecht bericht: „fix things” of „update” — bevat geen informatie. Over een maand kan de ontwikkelaar niet begrijpen wat er precies is gewijzigd en waarom. Goed bericht: „fix(payment): handle timeout in stripe callback” — meteen duidelijk waar en wat is gerepareerd.
Ontwikkelaars, vooral beginners, maken vaak typische fouten bij commits. De meest voorkomende — te grote commit waarin tientallen wijzigingen zijn vermengd. Zo'n commit kan niet gedeeltelijk worden teruggedraaid en code-review wordt een marteling.
De tweede meest voorkomende fout — een slecht commitbericht. Berichten van het type „fix”, „update”, „changes” of „wip” geven geen context aan toekomstige ontwikkelaars. Over een half jaar weet niemand meer wat er precies is gerepareerd. De regel is simpel: stel je voor dat je over een jaar in de geschiedenis kijkt en een specifieke wijziging probeert te vinden.
De derde fout — commit van niet-gecompileerde of niet-werkende code. Na een commit moet code ten minste compileren. Niet-gestripte build — de basisvereiste voor elke commit in een gedeelde branch. Hiervoor worden voor de commit de build en tests uitgevoerd.
De vierde fout — commit met vertrouwelijke gegevens. API-sleutels, wachtwoorden en tokens mogen niet in de Git-geschiedenis terechtkomen. Als een geheim al is gecommit, is het niet voldoende om het in een nieuwe commit te verwijderen — het moet uit de hele geschiedenis worden verwijderd via git filter-branch of BFG Repo-Cleaner.
Git biedt hulpmiddelen voor het beheren van de commitgeschiedenis. Een van de nuttigste is git commit --amend, waarmee de laatste commit kan worden aangevuld met nieuwe wijzigingen of het bericht kan worden gecorrigeerd. Dit is handig als de ontwikkelaar vergeten is een bestand toe te voegen of een fout in het bericht heeft gemaakt.
# Laatste commitbericht corrigeren
git commit --amend -m "fix(auth): correct token validation logic"
# Vergeten bestand toevoegen aan laatste commit
git add missed-file.txt
git commit --amend --no-edit
# Interactieve rebase voor laatste 3 commits
git rebase -i HEAD~3
Interactive rebase — een krachtig hulpmiddel voor het herschrijven van geschiedenis. Maakt het mogelijk commits samen te voegen (squash), berichten te wijzigen (reword), de volgorde te veranderen (reorder) en commits te verwijderen (drop). Rebase wijzigt echter de geschiedenis, dus wordt het alleen toegepast op lokale commits die nog niet naar de externe repository zijn gepusht.
Voor het terugdraaien van commits bestaan twee benaderingen. git revert maakt een nieuwe commit aan die de wijzigingen van de vorige ongedaan maakt — een veilige methode die de geschiedenis behoudt. git reset verwijdert commits uit de geschiedenis — gevaarlijk als commits al zijn gepusht. In teamontwikkeling wordt alleen git revert gebruikt voor het terugdraaien van gepubliceerde commits.
Veelgestelde vragen
Commiten betekent het creëren van een opslagpunt voor wijzigingen in Git. De commit legt de huidige status van bestanden in de projectgeschiedenis vast met een beschrijving van wat en waarom is gewijzigd. Elke commit heeft een unieke identificatie (SHA-1 hash) en maakt deel uit van een onlosmakelijke keten van wijzigingen.
Het wordt aanbevolen om commits te maken na elke logisch afgeronde wijziging, zelfs een kleine. Optimale frequentie — 1 commit per taak of correctie. Het is niet de bedoeling om elke 5 minuten te committen, maar ook niet om wijzigingen meerdere dagen op te hopen zonder een enkele commit.
Een atomaire commit bevat één logische wijziging — één taak, één bugfix of één nieuwe functionaliteit. Het vermengt geen verschillende wijzigingen in één commit. Voordelen van atomaire commits: eenvoudig terugdraaien, duidelijke geschiedenis en gemakkelijk code-review.
Voor het terugdraaien van een gepubliceerde commit gebruik je git revert
Ja, vóór het pushen naar de externe repository. Gebruik git commit --amend voor het wijzigen van de laatste commit of git rebase -i voor het wijzigen van meerdere commits. Na push wordt het wijzigen van de geschiedenis afgeraden — dit kan problemen veroorzaken bij andere ontwikkelaars als zij hun wijzigingen al hebben gepusht.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook