De geschiedenis van een project inspecteren met Git Log

De geschiedenis van een project inspecteren met Git Log

Een van de meest fundamentele diensten van Git is de projectgeschiedenis. Omdat Git alle wijzigingen in bestanden die in een repository zijn gemaakt bijhoudt, kan het zeer krachtige logfuncties bieden. U kunt de geschiedenis van een project op veel verschillende manieren opvragen en u kunt verschillende gegevens extraheren en weergeven met één flexibele opdracht.





De git log commando is enorm, het grootste van elk regulier Git-commando. De handleiding is meer dan 2500 regels lang. Gelukkig, git log biedt veel van het meest bruikbare gedrag van slechts een paar belangrijke opties.





Basisregistratie met het standaardgedrag

Standaard, git log toont een omgekeerd chronologische lijst van commits. Elke commit bevat zijn hash, auteur, datum en commit-bericht:





De opdracht gebruikt een pager (bijvoorbeeld minder, meer) om de volledige uitvoer weer te geven, zodat u gemakkelijk door de resultaten kunt navigeren. Je kunt Git configureren om een ​​programma naar keuze te gebruiken, zoals de meest pager .

Hier is wat git log-uitvoer van: de repository van de git-broncode zelf:



commit 670b81a890388c60b7032a4f5b879f2ece8c4558 (HEAD -> master, origin/next,
origin/master, origin/HEAD)
Author: Junio C Hamano
Date: Mon Jun 14 13:23:28 2021 +0900
The second batch
Signed-off-by: Junio C Hamano

Het resultaat begint met de commit-hash ( 670 ...) gevolgd door een lijst met branches die momenteel naar die commit wijzen ( HOOFD -> meester , enzovoort.)

donkere modus van bestandsverkenner werkt niet

De volgende regel beschrijft de auteur van deze commit, met vermelding van hun naam en e-mailadres.





De volledige datum en tijd van de commit volgen op de volgende regel.

Ten slotte verschijnt de volledige inhoud van het commit-bericht. Je kunt het meeste van al het andere dat git log biedt, besturen met opdrachtregelopties. Er zijn twee hoofdtypen opties:





  • Opmaak, die definieert hoe Git elke commit weergeeft.
  • Filteren, wat bepaalt welke commits git log omvat.

Naast de opdrachtregelopties, accepteert git log argumenten die bestanden, commits, branches of andere soorten referentie specificeren. Deze passen verdere filtering toe.

Git-logboekuitvoer formatteren

Een van de eenvoudigste aanpassingen is de --oneline optie die een zeer korte uitvoer produceert:

git log --oneline

Elke regel in het log bevat nu alleen een verkorte commit-hash en het onderwerp van het commit-bericht. Dit is een uitstekende manier om een ​​overzicht te krijgen van recente toezeggingen aan het project:

Helaas, zonder andere context, is deze informatie niet altijd even nuttig. Het geeft je misschien een vaag idee van het project, maar het mist datums en andere nuttige informatie over auteurs en bestanden.

Een vertakkingsgrafiek bekijken

De --grafiek optie stelt u in staat relaties tussen branches te visualiseren. Het is heel eenvoudig, maar kan helpen een gecompliceerde geschiedenis te ontrafelen.

git log --oneline --graph

Verwant: Hoe maak je een nieuwe vertakking in Git

Aangepaste mooie output

U kunt meer gecompliceerde opmaak bereiken door het in detail te specificeren met behulp van de --zeer optie. De syntaxis gaat van heel eenvoudig naar veel complexer, dus raadpleeg een handleiding voor volledige details .

waarom is mijn schijfgebruik op 100%
git log --pretty=short

Is in wezen hetzelfde als git log zonder de datum of het volledige bericht:

git log --pretty=oneline

Is gelijk aan git log --oneline .

git log --pretty=fuller

Bevat veel details. Het scheidt zelfs auteur en committer, die in theorie verschillende mensen kunnen zijn:

Met de formaat: variant, kunt u een string aanleveren met de inhoud die u wilt, inclusief tijdelijke aanduidingen die worden vervangen door verschillende gegevens. Hier zijn enkele voorbeelden van tijdelijke aanduidingen:

  • %H hash plegen
  • %H afgekorte commit hash
  • %tot auteur datum
  • %Met auteur datum, relatief
  • %s commit bericht onderwerp
  • % B commit berichttekst
  • %P afgekorte bovenliggende hashes

U kunt vaste tekens aan de uitvoer toevoegen en deze inkleuren. Dit voorbeeld toont ook een variatie op het datumformaat:

git log --pretty=format:'%C(auto) %h [%ad] %s' --date=short

Merk op dat de datum tussen haakjes staat. Welke opmaak u ook kiest, als u wilt dat de uitvoer nuttig is in een pijplijn of voor andere vormen van tekstverwerking, moet u overwegen hoe u elk deel van de uitvoer kunt afbakenen.

Verschillen in het logboek weergeven

Een belangrijk detail bij het bekijken van de geschiedenis van een repository zijn de diffs zelf. Ze vertegenwoordigen tenslotte wat er feitelijk in de code is veranderd! Om te beginnen kun je naast elke commit een samenvatting van de wijzigingen krijgen met --shortstat :

git log --shortstat

Dit voegt een regel toe zoals:

1 file changed, 48 insertions(+), 2 deletions(-)

Onderaan elke commit. Je zult dit soort samenvatting vaak zien - bijvoorbeeld op pagina's op GitHub - en het is een handige manier om snel de reikwijdte van een specifieke commit te beoordelen. Voor meer gedetailleerde informatie kunt u volledige patch-uitvoer (diffs) opnemen met behulp van de -P vlag:

git log -p

Git-logboekuitvoer filteren

Welke opmaak je ook toepast, je zult nog steeds het volledige logboek zien van alle commits in de huidige branch. Ook al verdeelt Git ze in pagina's, het kan nog steeds veel output zijn. Met de volgende opties kun je aanpassen welke commits het logboek bevat.

Beperken op bedrag

Als je alleen de resultaten wilt bijsnijden om de meest recente paar commits te tonen, gebruik dan de -[nummer] syntaxis:

git log -2

Beperken op datum

Om de set commits te beperken tot een bepaald datumbereik, gebruik je de --sinds ( --na ) en --tot ( --voordat ) opties. Deze hebben elk een datum in ISO 8601-formaat. Je kunt beide gebruiken: --sinds of --tot afzonderlijk of beide samen om een ​​bereik te specificeren. De opties --na en --voordat zijn synoniemen.

git log --since='2021-01-01' --until='2021-05-01'

Beperken op bestand

Git log kan focussen op een specifiek bestand in plaats van elk bestand in je repository. Dit is geweldig om u te helpen erachter te komen hoe een bepaald bestand in de loop van de tijd is veranderd. Voeg eenvoudig de bestandsnaam toe aan het einde van je git-opdracht:

git log filename

Je ziet alleen die commits die van invloed zijn bestandsnaam .

Verschillen tussen takken

Mogelijk hebt u enkele unieke vereisten bij het bekijken van het logboek van een filiaal. Bijvoorbeeld, in plaats van de hele geschiedenis te zien, wil je misschien gewoon zien wat er is veranderd in die specifieke branch. Git log kan helpen via de ref1..ref2 syntaxis. Er zijn drie enigszins verschillende benaderingen die u kunt gebruiken:

  1. Bekijk commits die in de main zijn, maar niet in de branch: |__+_|
  2. Bekijk commits die in branch zijn, maar niet in de main: |__+_|
  3. Bekijk commits die alleen in branch of main bestaan: |__+_|

Verschillen tussen twee tags

Net zoals u de geschiedenis tussen vestigingen kunt bekijken met behulp van de ref1..ref2 syntaxis, kunt u op dezelfde manier ook de geschiedenis tussen tags bekijken. Zowel tags als branches zijn immers vormen van referentie.

git log --oneline origin/branch..origin/main

Als u release-opmerkingen voor een groter project voorbereidt, git shortlog zou uw eerste aanloophaven moeten zijn. Het levert een lijst op van auteurs met daarnaast commit-onderwerpen. Je kunt het een referentiebereik doorgeven om de geschiedenis op een vergelijkbare manier te beperken als git log:

git log --oneline origin/ main ..origin/ branch

De git show commando is nog veelzijdiger dan git log . Het kan werken met tags en andere soorten git-objecten buiten de commit-geschiedenis. Het deelt veel opties met git log , maar je hebt het alleen echt nodig als je dieper moet ingaan op details op een lager niveau.

Bekijk het verleden met Git Log

Git log is een ingewikkeld commando, maar je kunt veel gebruik maken van de meest elementaire opties. Bladeren door de geschiedenis van een repository is een uitstekende manier om te begrijpen hoe vaak veranderingen optreden en hoeveel mensen ze maken. Als je eenmaal een goed begrip hebt van de geschiedenis van een project, ben je in een uitstekende positie om er zelf aan bij te dragen.

sms-berichten doorsturen naar een andere iphone
Deel Deel Tweeten E-mail Doe mee met de sociale coderingstrend en draag bij aan GitHub-opslagplaatsen

Wil je je codeerspieren trainen en open source-projecten helpen? Hier leest u hoe u kunt bijdragen aan GitHub.

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • GitHub
  • Codeertips
Over de auteur Bobby Jack(58 artikelen gepubliceerd)

Bobby is een technologie-enthousiasteling die bijna twee decennia als softwareontwikkelaar heeft gewerkt. Hij is gepassioneerd door gaming, werkt als recensie-editor bij Switch Player Magazine en is ondergedompeld in alle aspecten van online publiceren en webontwikkeling.

Meer van Bobby Jack

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren