Nettsiden har sluttet å virke, og i går gjorde den det. Noe har skjedd mellom, men hva, og i hvilken fil? I GitHub Desktop ville du åpnet fanen History. I terminalen har du tre kommandoer som gir deg det samme, og litt til: git log for listen over endringer, git show for detaljene i én av dem, og git diff for forskjellen mellom to versjoner.
git log: listen over commits
git log viser alle commits i branchen du står på, nyeste øverst. Hver commit har en lang ID, forfatter, dato og commit-melding. Er listen lang, blar du med mellomromstasten, og trykker Q for å gå ut.
Standardvisningen tar mye plass. Disse variantene er mer nyttige i hverdagen:
- git log --oneline viser én linje per commit, med en kort ID og meldingen.
- git log --oneline --graph --all tegner branchene og hvor de ble slått sammen, som en enkel graf i terminalen.
- git log -5 viser bare de fem siste.
- git log --author="Navn" viser bare én persons commits.
- git log -- index.html viser bare commits som har endret den filen.
Her merker du hvor mye gode commit-meldinger betyr. «Endre farge på knapp» sier noe. «Fikset» gjør det ikke.
git show: alt om én commit
git log forteller at noe skjedde, men ikke hvilke linjer som ble endret. Kopier ID-en til commiten, og kjør git show etterfulgt av den. Du trenger ikke hele ID-en. De første sju tegnene holder, og det er dem git log --oneline viser.
Resultatet er det samme som når du klikker på en commit i History i GitHub Desktop: meldingen, hvem som gjorde det, og hver linje som ble lagt til eller fjernet. git show HEAD viser siste commit uten at du trenger ID-en, og git show HEAD~1 den før.
git diff: forskjellen mellom to versjoner
git diff uten noe mer viser det du har endret siden siste commit, men ikke lagt i staging ennå. Det er det du ser i fanen Changes i GitHub Desktop før du committer. Valgene bestemmer hva som sammenlignes:
| Kommando | Sammenligner |
|---|---|
| git diff | Arbeidsmappen mot staging. Det du har endret, men ikke lagt til |
| git diff --staged | Staging mot siste commit. Det som blir med i neste commit |
| git diff HEAD~3 | Filene nå mot slik de var for tre commits siden |
| git diff main dev | To branches mot hverandre |
| git diff main origin/main | Din main mot den du har hentet fra GitHub med fetch |
Tips: Kjør git diff --staged rett før hver commit. Da ser du nøyaktig hva du er i ferd med å lagre, og fanger opp en glemt testlinje eller en fil som ikke skulle vært med.
Slik leser du en diff
Utskriften ser kryptisk ut første gang, men består bare av tre typer linjer:
- Linjer som begynner med + er lagt til. I terminalen er de grønne, som i GitHub Desktop.
- Linjer som begynner med - er fjernet, og er røde.
- Linjer uten tegn er uendret, og står der for å vise hvor i filen endringen er.
Linjene som begynner med @@, forteller hvilke linjenumre bolken under gjelder. En endret linje vises som én minuslinje med det gamle innholdet, fulgt av én plusslinje med det nye.
Søk i historikken
Vet du hva som ble endret, men ikke når, kan git log lete for deg. git log -S "loggInn" finner alle commits som la til eller fjernet teksten «loggInn» et sted i koden. Det er raskeste vei til svaret på «når forsvant denne funksjonen?». git log --grep="meny" søker i commit-meldingene i stedet. Og git log -p viser hele endringen under hver commit, som en git show for alle på én gang.
Lurer du på hvem som sist endret en bestemt linje, svarer git blame index.html. Den viser filen linje for linje, med commit-ID, forfatter og dato foran hver. På github.com finner du det samme med knappen Blame når du har åpnet en fil.
Finn feilen: et eksempel
Tilbake til nettsiden som sluttet å virke. Slik går du frem:
- Kjør git log --oneline -10 for å se de siste ti endringene.
- Finn commitene fra i går og i dag. Er det en melding som peker mot det som er ødelagt, starter du der.
- Kjør git show med ID-en til commiten og les linjene som ble endret.
- Vet du at alt virket for fem commits siden, viser git diff HEAD~5 alt som har endret seg siden, i én oversikt.
Når du har funnet feilen, retter du den og lager en ny commit. Historikken viser da både feilen og rettelsen, og det er nyttig for den som lurer på det samme senere. Hvordan du lager selve commitene, står i Slik bruker du git status, git add og git commit. Kommandoene er også nyttige når du skal forstå en merge-konflikt, fordi git log viser hvilke commits som kolliderte. Alle valgene står i Git-dokumentasjonen for git log.
Denne videoen er hentet fra kurset Git og GitHub på Utdannet.no. I det fulle kurset ser du log, show og diff side om side med fanen History i GitHub Desktop, og bruker dem senere til å se hva som skjedde da du løste en merge-konflikt.


