Hoofdstuk 3
Geschiedenis lezen
Lees het verhaal van een repository
Je hebt een repository geopend die je niet zelf hebt gemaakt. Hij is van Fern & Fig, een kleine plantenwinkel, en bevat al elf commits. Voordat je iets verandert, wil je weten wat hier is gebeurd.
Daar dient een geschiedenis voor. Je hoeft niet meteen elke regel van de uitvoer te begrijpen. Je hebt één betrouwbaar beginpunt nodig.
Wat één commit bevat
Je kent een commit al als een momentopname met een reden erbij. Hier is de iets uitgebreidere versie die je nodig hebt om een bestaande geschiedenis te lezen.
Een commit legt vast:
een momentopname van elk bijgehouden bestand in het project;
een bericht, auteur en datum;
een verwijzing naar de eerdere geschiedenis. Een gewone commit heeft één oudercommit (parent); de eerste commit heeft er geen. Hoofdstuk 6 verfijnt die regel voor samenvoegingen.
Die laatste verwijzing maakt van losse momentopnamen een verhaal. Git kan de verwijzingen vanaf de nieuwste commit terugvolgen tot het begin.
Een commit bewaart geen kant-en-klare lijst gewijzigde regels. Als Git een wijziging toont, berekent het het verschil tussen de momentopname van die commit en een andere momentopname. Als je die twee ideeën uit elkaar houdt, zijn de volgende lessen veel gemakkelijker te lezen.
Vraag de geschiedenis op
git log leest de commits die vanaf je huidige positie bereikbaar zijn en toont ze met de nieuwste eerst. Zonder opties krijg je de gewone, leesbare vorm: identificatiecode, auteur, datum en bericht van de commit.
Op een gewone computer opent een lang Git-resultaat vaak in een pager: een weergave over het hele scherm waarin je kunt scrollen. Druk op q om die te verlaten. De terminal in deze cursus schakelt de pager bewust uit. Dezelfde uitvoer schuift hier dus gewoon voorbij.
Voer nu de opdracht zonder opties uit:
git log
Begin bovenaan. Het nieuwste bericht is Document where stock lives. Daaronder staat een langer bericht over het herstellen van een ontbrekende decimale punt. Verder naar beneden staan korte berichten zoals spacing en wip, waar je bijna niets aan hebt.
Die mix is normaal. Een geschiedenis wordt in de loop van de tijd door mensen geschreven en niet elk bericht is goed. Je hoeft niet in één oogopslag alle elf commits te doorgronden. Stel eerst een kleine vraag: wat is het nieuwste, wie heeft het gemaakt en wat is er volgens het bericht gebeurd?
De lange identificatiecode
Elk item begint met commit en een lange string zoals ed9fce3016100405187bbe307b1731f2bb91ba5b. Dat is de identificatiecode van de commit. Ze duidt precies één commit in deze repository aan.
Je hoeft zelden de hele code te typen. Een kort begin zoals ed9fce3 is genoeg als het uniek is in de repository. Git meldt het als het opgegeven deel bij meer dan één commit kan horen.
De identificatiecode is een label, geen score en niets om uit je hoofd te leren. Kopieer haar als je iets over die commit wilt vragen en laat Git het onthouden.
Welk bericht staat bovenaan in de voorbereide geschiedenis van Fern & Fig?
Je hebt de nuttige eerste verkenning gedaan: het nieuwste bovenaan, berichten als wegwijzers en identificatiecodes als labels. Hierna open je één commit en bekijk je hoe de momentopname verschilt van de vorige.