
Een basisvereiste van elk versiebeheersysteem is om verschillende versies van bestanden voor u op te slaan. In Git is het commando dat dit doet commit. Hier is alles wat u moet weten.
Wat is een commit in Git?
Het commit-commando configureren
Het commit-commando gebruiken
Een basisverbintenis
Auto-Staging-bestanden
Staging en Committing tegelijkertijd
Toewijding aan een andere branche
Wijzigingen aanbrengen in toezeggingen
Wijzigingen van een commit verwijderen
Een volledige commit ongedaan maken
Het Git Zwitsers zakmes
Wat is een commit in Git?
Toezeggingen zijn de reeks snapshots die tijdens de levenscyclus van een project zijn gemaakt en die de ontwikkelingsgeschiedenis vormen. Commits stellen ons in staat om een versie van het project te extraheren zoals het was op verschillende punten in het verleden. Waarom is dat belangrijk?
Versiecontrolesystemen (VCS’s) worden het meest gebruikt bij softwarebroncode en ontwikkelingsprojecten. Maar ze kunnen met succes worden gebruikt met elke verzameling tekstbestanden, zoals Markdown-bestanden die hoofdstukken van een boek bevatten.
U wilt misschien niet dat elk bestand in uw projectmappen door de VCS wordt afgehandeld, dus u moet in staat zijn om de bestanden te nomineren waarvan u versiebeheer wilt hebben. Dit voegt ze toe aan de versiebeheerweergave van het project. Ze worden gecontroleerd op wijzigingen.
Een andere manier om dit te bereiken is door een negeerlijst te gebruiken. Dit vertelt Git welke bestanden, mappen of soorten bestanden het altijd moet negeren.
Als er in de loop van de tijd nieuwe bestanden aan het project worden toegevoegd, moeten sommige worden toegevoegd aan het versiebeheersysteem. In Git wordt dit afgehandeld door de add commando. Eigenlijk, de add commando doet dubbele dienst, zoals we zullen zien.
Om een historie bij te houden van de wijzigingen die in het project zijn aangebracht, zul je Git periodiek vragen om een momentopname van de status van het project op te slaan, gebruikmakend van de commit commando. Dit is waar de add opdracht verschijnt opnieuw in onze workflow. Wij gebruiken de add opdracht om Git te vertellen welke veranderd bestanden die we in de snapshot willen opnemen. Dan gebruiken wij commit om Git te vertellen om de momentopname te maken.
Het commit-commando configureren
Hierin wordt informatie over de commit opgeslagen, zodat het altijd mogelijk is om te weten wie de commit heeft gemaakt, wanneer en wat de commit inhoudt. Sommige van deze metadata worden vastgelegd tijdens het commit-tijdstip, zoals het commit-bericht.
Metadata met betrekking tot de identiteit van de leden van het ontwikkelteam kan door elke gebruiker worden geconfigureerd, om te voorkomen dat herhaaldelijk dezelfde informatie wordt verstrekt.
Gebruik deze opdracht om uw naam globaal in te stellen voor alle repositories op uw computer.
git config --global user.name "Dave McKay"

Gebruik deze opdracht om te controleren of uw naam is ingesteld.
git config --global user.name

Als u een andere naam moet gebruiken voor een bepaalde repository, ga dan naar de map van het project en gebruik dezelfde opdracht zonder de --global keuze.
git config user.name "McKay, David"
git config user.name

We hebben nu een andere standaard gebruikersnaam voor deze repository en onze algemene naam wordt nog steeds gebruikt voor andere repositories.
Op een vergelijkbare manier kunnen we een e-mailadres globaal of voor een enkele repository instellen door het op te nemen of weg te laten --global keuze.
git config user.email "dave@phony-domain.com"
git config --global user.email "dave@fake-domain.com"
git config user.email
git config --global user.email

Deze instellingen worden bewaard in configuratiebestanden. Globale Git instellingen worden bewaard in “~/.gitconfig”, en repository-specifieke instellingen worden bewaard in het “.git/config” bestand van de repository.
De commit opdrachtreferenties en gebruikt deze waarden terwijl het werkt.
Het commit-commando gebruiken
Het basisgebruik van de commit De opdracht is om de bestanden die zich in het verzamelgebied bevinden, ook wel de index genoemd, te nemen en ze op te slaan als een commit in de huidige tak van de repository.
Een basisverbintenis
We hebben een project met een gewijzigd bestand. We gebruiken de add opdracht om het bestand te stagen en vervolgens vast te leggen. We gebruiken de -m (commit message) optie zodat we een korte beschrijving kunnen geven van het doel van de wijzigingen. Als we deze optie niet gebruiken, worden we gevraagd om een commit-bericht terwijl de commit plaatsvindt. Het is handiger om er een toe te voegen op de opdrachtregel.
git add jibber.c
git commit -m "Updated help text"

Als we de git log commando kunnen we de details van de commits bekijken, in chronologische volgorde, met de meest recente commit bovenaan de lijst.
git log

De commits worden weergegeven in less.

De commit is getagd met de naam en het e-mailadres die we eerder hebben opgegeven, en ons commit-bericht is ook opgenomen.
Auto-Staging-bestanden
Het klaarzetten van veel bestanden kan even duren. Een andere benadering is het gebruik van de -A (alle) optie met add.
Dit zet alles automatisch in scène gewijzigd bestanden samen met alle momenteel niet gevolgd bestanden. De staging van niet-gevolgde bestanden respecteert de instellingen in uw “.gitignore”-bestand. Git zal geen bestanden opvoeren waarvan je hebt gezegd dat je ze niet wilt opnemen. Ten slotte zijn bestanden in de index die niet meer in de werkmap staan VERWIJDERD uit de index.
Duidelijk, de -A optie kan ervoor zorgen dat er veel tegelijk gebeurt. De --dry-run optie geeft u een voorbeeld van de wijzigingen zonder ze daadwerkelijk uit te voeren.
git add -A --dry-run

In ons voorbeeld worden twee gewijzigde bestaande bestanden en twee nieuwe bestanden geënsceneerd. Laten we doorgaan en de gebruiken -A optie voordat we de commit commando.
git add -A
git commit -m "Enhanced parsing"

We kunnen zien dat er in totaal vier bestanden zijn gewijzigd. Twee daarvan zijn de nieuw gemaakte bestanden, die worden vermeld.
Staging en Committing tegelijkertijd
De commit opdracht heeft een kleine letter -a (alle) optie. Dit voert de staging en het committen van bestanden in één stap uit.
De commit -a optiefasen en commits aangepast bestaande bestanden, en verwijdert bestanden uit de index als ze uit uw werkdirectory zijn verwijderd. Het niet niet-gevolgde bestanden automatisch stagen.
Zoals de add commando, het commit commando heeft een --dry-run optie waarmee u een voorbeeld van de acties kunt bekijken voordat u deze uitvoert.
git commit -a --dry-run

Laten we nu de opdracht uitvoeren.
git commit -a --dry-run

De bestanden worden voor ons geënsceneerd en vastgelegd.
Toewijding aan een andere branche
Als je enkele wijzigingen hebt aangebracht in bestanden in je werkdirectory en je beseft dat je niet de juiste branch hebt uitgecheckt, moet je je wijzigingen naar de juiste branch laten committen zonder de huidige branch te beïnvloeden.
Git heeft geen commando om naar een andere branch te committen. Maar je kunt deze situatie rechtzetten met een beetje Git-behendigheid.
We gebruiken de Git stash opdracht om een kopie van de wijzigingen te maken. Vervolgens bekijken we de juiste branch en passen we de wijzigingen toe vanuit de stash. Om de opgeslagen wijzigingen toe te passen, gebruiken we de pop commando in plaats van de apply commando. De pop commando past de wijzigingen toe en verwijdert ze ook uit de stash.
We hebben enkele wijzigingen aangebracht in onze repository’s new-parser tak. Ze hadden gemaakt moeten zijn in de classic-parser tak.
git stash
git checkout classic-parser
git stash pop

We kunnen nu a commiten werk deze tak bij.
git commit -a -m "Added pre-parser functions"

Als we terugkeren naar de new-parser branch kunnen we zien dat het up-to-date is, wat betekent dat de wijzigingen uit je werkdirectory zijn verwijderd en dat je repository en bestanden gesynchroniseerd zijn.
git checkout new-parser
git status

Wijzigingen aanbrengen in toezeggingen
Als je je commit bericht moet verbeteren—misschien heb je er een typfout in gezien—of je bent vergeten een bestand te stagen dat in de commit had moeten zitten, dan kun je de --amend optie om dingen recht te zetten. Het voorbehoud is dat dit niet moet worden gebruikt voor commits die naar een externe repository zijn gepusht.
In ons laatste commit-bericht had “fraze” “phrase” moeten zijn. Als we gebruiken git log we kunnen dit zien.

Om dit te corrigeren, gebruiken we de --amend optie als deze.
git commit --amend -m "Optimized phrase identification"

Als we gebruiken git log nogmaals, we kunnen zien dat de oude commit is vervangen door een nieuwe met de gecorrigeerde commit-boodschap.

Als we een bestand willen toevoegen dat we zijn vergeten te stagen, kunnen we dat bestand committen zodat het verschijnt als onderdeel van de vorige commit.
We zullen gebruiken add om het bestand te stagen, maak dan een commit met de --amend keuze. De --no-edit optie betekent dat we geen nieuw commit-bericht hoeven te geven. Het vorige commit-bericht blijft behouden.
git add jibber.c
git commit --amend --no-edit

Wijzigingen van een commit verwijderen
Als je per ongeluk een bestand hebt gestaged en gecommit, terwijl je dat niet van plan was, kun je dat bestand uit de commit verwijderen met de reset commando. We resetten de commit terug naar het verzamelgebied of de index. Vervolgens verwijderen we het bestand en leggen we de rest van de bestanden opnieuw vast.
Om de laatste commit naar het verzamelgebied te resetten, gebruiken we de reset --soft commando. HEAD~ is een afkorting voor “de commit achter de HEAD van de project commit tijdlijn”, of in het Engels, “the last commit”.
git reset --soft HEAD~

Om het bestand te verwijderen dat niet had moeten worden opgenomen, gebruiken we de reset --mixed commando. Hierdoor worden die wijzigingen teruggezet in de werkmap, waarbij het gewijzigde bestand opnieuw wordt gemaakt als een niet-geënsceneerd, niet-vastgelegd bestand.
git reset --mixed jibber.c

We moeten de andere bestanden vastleggen die in de index zijn achtergebleven.
git commit -m "Experimental tweaks"

De andere twee bestanden die in de oorspronkelijke commit zaten, zijn opnieuw voor ons vastgelegd.
Een volledige commit ongedaan maken
Soms is het ongedaan maken van een volledige commit het makkelijkste om te doen. Het zet je werkmap en repository terug in de staat waarin ze zich bevonden voordat je vastlegde.
We moeten de gehashte referentie-ID van de commit gebruiken. We kunnen dit vinden met behulp van git log:

Kopieer die referentie en gebruik deze in het revert commando:
git revert e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8

Hiermee wordt uw standaardeditor geopend, zodat u een terugzetbericht kunt bewerken. Er is een standaardbericht voor u ingevoerd. U kunt dit gebruiken of naar wens bewerken.

Als u tevreden bent met uw terugzetbericht, slaat u het bestand op en verlaat u de editor. In nano doe je dit met “Ctrl+O” en “Ctrl+X”.

Gebruik makend van git log nogmaals, we kunnen zien dat er een nieuwe commit is toegevoegd die de wijzigingen van de teruggedraaide commit ongedaan maakt.
Het Git Zwitsers zakmes
Blijkbaar, commit is een van de belangrijkste Git-commando’s. Het kan veel, dus er valt veel te leren. Het is goed besteed om de minder gebruikte functies onder de knie te krijgen. Als u een fout moet corrigeren – nu meteen – zult u blij zijn dat u zich van tevoren hebt voorbereid.