Vezérlőpult
8. Előzmények és a commit-hash · Helyi munka: az első commitok

2. témakör · Helyi munka: az első commitok · 8. fejezet

Előzmények és a commit-hash

A commitok a projekt naplóját adják, most megtanulod olvasni ezt a naplót. Megnézzük, mit jelent a commitok azonosítója, a hash, hogyan szűröd a git log kimenetét, hogyan hivatkozol egy régebbi commitra, és hogyan mutatja meg a git show és a git diff, hogy pontosan mi változott.

CLI + Desktop + WebHash-laborLog-laborDiff-laborSzimulátor15 kvízkérdés

Tanulási célok

1A commit-hash

Minden commitnak van egy azonosítója, a hash (más néven SHA vagy commit-ID). Ez egy 40 hexadecimális jegyből (0–9, a–f) álló szám, például:

a3f1c07d92e4b1c6f0a8e57b3d21c9f4e6a0b8d2

A Git a SHA-1 nevű hash-függvénnyel számolja ki a commit teljes tartalmából: a fájlok pillanatképéből, a szülő-commit hash-éből, a szerzőből, az időpontból és az üzenetből. Ezért:

Hash-labor: egy karakter, és minden más

Írj a „fájlba”! A Git ugyanezt a hash-t adná rá (git hash-object etlap.txt). Figyeld, hány jegy változik meg egyetlen karakter módosításakor.

Próbáld ki:
teljes hash
rövid alak
előző—
ℹ️ SHA-1 ÉS SHA-256

A SHA-1-et ma már nem tartják elég erősnek titkosítási célra, ezért a Git fejlesztői fokozatosan áttérnek a hosszabb SHA-256-ra (64 jegy). A mindennapi használatban a GitHub és a legtöbb repó ma is 40 jegyű SHA-1 hash-t mutat.

2A commitok láncolata

Minden commit tárolja a szülője, vagyis az előző commit hash-ét. A commitok így egy láncot alkotnak, amelyben mindegyik visszafelé mutat. Mivel a szülő hash-e része a commit tartalmának, a hash a teljes addigi történettől függ.

Mi történik, ha egy régi commitot megváltoztatsz?

Írd át valamelyik commit üzenetét, és figyeld a hash-eket!

⚠️ EZÉRT NEM ÍRJUK ÁT A MEGOSZTOTT TÖRTÉNETET

Egy régi commit módosítása valójában új commitokat hoz létre, új hash-sel, és minden utána következő commit is új hash-t kap. Ha a régit már feltöltötted, és a társaid is letöltötték, az ő gépükön más történet lesz, mint a tiéden. Ezért egy már megosztott commitot nem írunk át, hanem egy új, javító commitot készítünk (10. fejezet).

3A git log olvasása

A git log a legfrissebbtől visszafelé listázza az aktuális ág commitjait:

commit a3f1c07d92e4b1c6f0a8e57b3d21c9f4e6a0b8d2 (HEAD -> main)teljes hash · HEAD -> main: itt állsz, ez a main ág legfrissebb commitja
Author: Szabó Lili <szabo.lili@pelda.hu>szerző (a user.name és a user.email beállításból)
Date: Wed Sep 16 15:30:00 2026 +0200időpont, időzónával
fix: cappuccino árának javításaaz üzenet, behúzva (tárgysor, és ha van, a törzs)
💡 HOSSZÚ KIMENET: A LAPOZÓ

Ha a kimenet nem fér ki, a Git egy lapozóban (pager) mutatja. A sor végén : látszik, a program vár. Szóköz: következő oldal, ↑/↓: soronként, /: keresés, q: kilépés. Sok kezdő itt „beragad”: a q a megoldás.

4A git log kapcsolói

ParancsMit mutat?
git log --onelinecommitonként egy sor: rövid hash és tárgysor
git log -n 3 · git log -3csak a legutóbbi 3 commit
git log --statmelyik fájl hány sorban változott
git log -pminden commit teljes változása (diffje)
git log -- etlap.htmlcsak az adott fájlt érintő commitok (a -- után fájlnév jön)
git log --author="Tóth"csak az adott szerző commitjai (a név egy része is elég)
git log --grep="fix"azok a commitok, amelyek üzenetében szerepel a szöveg
git log --since="2 weeks ago"időszakra szűr (--until a vége)
git log --oneline --graph --allaz összes ág rajzzal: az ágaknál (11–12. fejezet) nagyon hasznos

A kapcsolók kombinálhatók. Egy fájl részletes története például: git log -p -- etlap.html.

Log-labor: kapcsolgasd!

A Csésze Kávézó weboldalának öt commitja. Válaszd ki a kapcsolókat, és nézd, hogyan változik a kimenet.


    

  

5Hivatkozás egy commitra

A parancsoknak (git show, git diff, később a git revert, git reset …) meg kell mondani, melyik commitról van szó. Erre többféle hivatkozás van:

HivatkozásJelentés
a3f1c07d92e4… · a3f1c07a teljes vagy a rövid hash (legalább 4 jegy, egyértelmű legyen)
HEADahol most állsz: az aktuális ág legutolsó commitja
mainegy ág neve: az ág legutolsó commitja
HEAD~1 · HEAD~2 · HEAD~nn lépéssel korábbi commit (szülő, nagyszülő, …)
HEAD^ · HEAD^^ugyanaz, mint a HEAD~1 és a HEAD~2
main~3 · a3f1c07~1a ~ bármilyen hivatkozás után állhat
⚠️ A ^ JEL A RÉGI PARANCSSORBAN

A Windows régi cmd.exe-jében a ^ különleges karakter, ezért a HEAD^ ott nem úgy működik, ahogy várnád. PowerShellben és Git Bashben nincs vele gond. A HEAD~1 alak mindenhol biztonságos.

Célkereső: hová mutat?

Írj be egy hivatkozást (pl. HEAD~2, main^, c8b4), vagy oldd meg a feladványokat: kattints arra a commitra, amelyre a hivatkozás mutat!

1 / 8Pontszám: 0

6Egy commit részletei: git show

A git show egyetlen commitot mutat meg: a fejlécét (mint a git log), és alatta a teljes változását. Hivatkozás nélkül a HEAD-et, vagyis a legutolsó commitot mutatja.

PS> git show a3f1c07
commit a3f1c07d92e4b1c6f0a8e57b3d21c9f4e6a0b8d2
Author: Szabó Lili <szabo.lili@pelda.hu>
Date:   Wed Sep 16 15:30:00 2026 +0200

    fix: cappuccino árának javítása

diff --git a/etlap.html b/etlap.html
index 5e1d2c4..9f07ab3 100644
--- a/etlap.html
+++ b/etlap.html
@@ -1,6 +1,6 @@
 <h1>Étlap</h1>
 <ul>
   <li>Espresso – 590 Ft</li>
-  <li>Cappuccino – 890 Ft</li>
+  <li>Cappuccino – 950 Ft</li>
   <li>Kakaó – 790 Ft</li>
 </ul>
ParancsMit mutat?
git showa legutolsó commitot (HEAD) a változásaival
git show HEAD~2a két lépéssel korábbi commitot
git show a3f1c07 --statcsak az összesítést: melyik fájl hány sorban változott
git show HEAD~2:etlap.htmlegy fájl akkori teljes tartalmát (a : után a repó gyökerétől számított útvonal)
💡 RÉGI VÁLTOZAT KIMENTÉSE

Egy fájl régi változatát a git show HEAD~3:style.css | Set-Content regi-style.css paranccsal elmentheted anélkül, hogy bármit visszaállítanál. A visszaállítás módjait a 10. fejezetben tanuljuk.

7git diff: mit mivel hasonlít össze?

A git diff két állapot közötti különbséget mutatja soronként. A kérdés mindig az, melyik két állapotot hasonlítja össze. Ismerős a 6. fejezet három területe:

Munkakönyvtára fájlok most, a lemezen
Előkészítési területindex, staging
Utolsó commitHEAD
git diff
git diff --staged
git diff HEAD
ParancsMit hasonlít össze?Mikor hasznos?
git diffmunkakönyvtár ↔ előkészítési területmit módosítottam, amit még nem adtam hozzá?
git diff --staged
(régebbi neve: --cached)
előkészítési terület ↔ utolsó commitmi kerül a következő commitba? Commit előtt érdemes megnézni!
git diff HEADmunkakönyvtár ↔ utolsó commitminden változás az utolsó commit óta
git diff HEAD~3 HEAD
vagy HEAD~3..HEAD
két commitmi változott a kettő között?
git diff -- style.css(bármelyik fenti, egy fájlra szűkítve)csak egy fájl érdekel
git diff --stat(bármelyik fenti, összesítve)áttekintés: melyik fájl hány sorban változott
⚠️ AZ ÜRES DIFF IS VÁLASZ

Ha a git diff semmit nem ír ki, két eset lehet: vagy nincs változás, vagy már minden változást előkészítettél, ekkor a git diff --staged mutatja őket. Az új, még követetlen fájlokat a git diff egyáltalán nem mutatja, azokról a git status szól.

Melyik parancs kell?

Válaszd ki, melyik parancs válaszol a kérdésre!

1 / 8Pontszám: 0
…

8A diff olvasása

A diff kimenete (unified diff formátum) elsőre ijesztő, de néhány szabállyal könnyen olvasható:

diff --git a/etlap.html b/etlap.htmlmelyik fájl: a/ = régi, b/ = új változat
index 5e1d2c4..0b4a7e2 100644a két tartalom rövid hash-e és a fájl módja
--- a/etlap.htmla régi változat jele: -
+++ b/etlap.htmlaz új változat jele: +
@@ -1,6 +1,7 @@hunk (változott blokk): a régi fájl 1. sorától 6 sor, az újban az 1. sortól 7 sor
<h1>Étlap</h1>környezet: változatlan sor (szóközzel kezdődik)
<ul>
<li>Espresso – 590 Ft</li>
- <li>Cappuccino – 890 Ft</li>törölt sor (-)
+ <li>Cappuccino – 950 Ft</li>új sor (+): egy módosított sor = törlés + hozzáadás
<li>Kakaó – 790 Ft</li>
+ <li>Matcha latte – 1290 Ft</li>új sor
</ul>

Diff-labor: írd át, és nézd a diffet

Bal oldalt a régi, jobb oldalt az új változat. Módosíts, törölj, szúrj be sorokat!


  

9Ki írta ezt a sort? git blame

A git blame fájl a fájl minden sora mellé kiírja, melyik commit, ki és mikor írta utoljára. Ha egy sor furcsa, innen tudod meg, melyik commitban került oda, és a git show-val elolvashatod a commit üzenetét: miért változott.

PS> git blame etlap.html
7c21e9ab (Kovács Anna 2026-09-11 13:40:00 +0200 1) <h1>Étlap</h1>
7c21e9ab (Kovács Anna 2026-09-11 13:40:00 +0200 2) <ul>
7c21e9ab (Kovács Anna 2026-09-11 13:40:00 +0200 3)   <li>Espresso – 590 Ft</li>
a3f1c07d (Szabó Lili  2026-09-16 15:30:00 +0200 4)   <li>Cappuccino – 950 Ft</li>
7c21e9ab (Kovács Anna 2026-09-11 13:40:00 +0200 5)   <li>Kakaó – 790 Ft</li>
7c21e9ab (Kovács Anna 2026-09-11 13:40:00 +0200 6) </ul>
ℹ️ NEM HIBÁST KERESÜNK, HANEM MAGYARÁZATOT

A „blame” szó jelentése „hibáztatni”, de a parancs valódi célja a kontextus: kitől kérdezhetsz, és melyik commit üzenete magyarázza el a sort. A GitHubon egy fájl megnyitásakor a Blame gomb ugyanezt mutatja, a VS Code-ban a GitLens bővítmény a sor mellé írja.

10Előzmények a Desktopban és a GitHubon

Desktop GitHub Desktop
  • A History fül a commitok listája: tárgysor, szerző, idő. Egy commitra kattintva jobbra látszanak a változott fájlok és a diff, fent a teljes üzenet és a rövid hash.
  • Jobb klikk egy commitra: Copy SHA (hash másolása), View on GitHub, és később: Revert changes in commit (10. fejezet), Create branch from commit (11.), Create tag (15.).
  • Több egymást követő commit Shift-tel kijelölhető, ilyenkor az összesített változást mutatja.
  • A Changes fül a még nem commitolt változások diffje (a git diff HEAD-nek felel meg).
  • A diff nézet fogaskerék ikonjánál: Unified (egymás alatt) vagy Split (egymás mellett), és a csak szóközben eltérő változások elrejtése.
Web GitHub.com
  • A repó főoldalán a commits link (óra ikon, a commitok számával) nyitja a commitlistát.
  • Egy commitra kattintva a diff látszik; a Split/Unified nézet itt is választható. Az URL: github.com/felhasznalo/repo/commit/a3f1c07. Rövid hash-sel is működik.
  • A commitnál a Browse files a teljes repót mutatja akkori állapotában.
  • Egy fájl megnyitásakor a History gomb a fájl előzményeit, a Blame gomb a soronkénti szerzőket mutatja.
IDE VS Code
  • A Source Control panelen egy módosított fájlra kattintva egymás mellett látod a régi és az új változatot.
  • Az Explorer alján a Timeline nézet a megnyitott fájl commitjait listázza; bármelyikre kattintva megnyílik a diffje.
  • Bővítmények: a GitLens soronkénti blame-et és részletes előzményeket ad, a Git Graph rajzolja az ágakat (25. fejezet).

11Gyakorlás a szimulátorban

A kavezo repóban öt commit van három szerzőtől, és az étlapon van egy még nem commitolt módosítás. Nyomozz a történetben! A szimulátor alatt a commitlánc látszik a HEAD~n hivatkozásokkal.

PowerShell + Git

Windows PowerShell
Küldetések 0 / 8

    12Feladatok

    Gyakorló feladatok

    ⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

    8.1⭐CLI

    A saját repódban futtasd a git log, a git log --oneline és a git log --stat parancsot! Keresd meg a legelső commit hash-ét, és írd ki a git show <rövid hash> paranccsal.

    8.2⭐CLI

    Módosíts egy követett fájlt, de ne add hozzá! Nézd meg a git diff kimenetét. Ezután git add, és futtasd újra a git diff-et és a git diff --staged-et. Írd le, mikor melyik mutat valamit, és miért.

    8.3⭐

    Egy repóban 6 commit van. Melyik commitra mutat a HEAD~5? És a HEAD~6? Próbáld ki a Célkeresőben vagy a saját repódban, és magyarázd meg a hibaüzenetet!

    8.4⭐⭐Desktop

    Nyisd meg a repódat a GitHub Desktopban! A History fülön keresd meg ugyanazt a commitot, amelyet a 8.1-ben a parancssorban néztél. Egyezik a hash? Másold ki a Copy SHA menüponttal, és illeszd be egy git show parancsba.

    8.5⭐⭐Web

    Egy nyilvános GitHub-repóban (pl. a github/gitignore) nyiss meg egy fájlt, és nézd meg a History és a Blame nézetét! Melyik sort módosították utoljára, ki, és milyen üzenettel?

    8.6⭐⭐CLI

    Készíts egy fájlt hello tartalommal (egy sortöréssel a végén), és számold ki a hash-ét a git hash-object fájlnév paranccsal! Hasonlítsd össze a Hash-laborban kapott értékkel. Ha eltér, mi lehet az oka? (Tipp: sorvége, kódolás.)

    8.7⭐⭐⭐CLI

    Egy csapatprojektben derítsd ki parancssorból: ki commitolt a legtöbbet (git shortlog -sn), melyik fájl változott a legtöbbször (git log --name-only --oneline), és mi volt az utolsó hibajavítás (git log --grep="fix" -1 -p). Írj róla rövid jelentést.

    13Önellenőrző kvíz

    Ellenőrizd magad!

    Az egyválasztós kérdéseknél kattints a válaszra. A többválasztósaknál jelöld be az összes helyeset, majd nyomd meg az Ellenőrzés gombot.

    14Fogalomtár

    FogalomJelentés
    commit-hash (SHA)a commit 40 jegyű hexadecimális azonosítója, a tartalmából számolva (SHA-1)
    rövid hasha hash első jegyei (általában 7), ha egyértelműek
    szülő-commitaz előző commit; a hash-ét minden commit tárolja, így láncot alkotnak
    HEADahol most állsz: az aktuális ág legutolsó commitja
    HEAD~n · HEAD^n lépéssel korábbi commit · a szülő (= HEAD~1)
    git loga commitok listája a legfrissebbtől visszafelé
    git showegy commit fejléce és teljes változása; rev:fájl alakban egy régi fájlváltozat
    git diffkét állapot soronkénti különbsége (alapból munkakönyvtár ↔ index)
    git diff --stagedaz előkészített változások: index ↔ utolsó commit
    diff / patcha különbség leírása: - törölt, + új sor
    hunka diff egy összefüggő változott blokkja, @@ -régi +új @@ fejléccel
    git blamesoronként mutatja, melyik commit, ki és mikor írta
    lapozó (pager)a hosszú kimenet nézegetője; q: kilépés

    15Összegzés

    1. A commit hash-e 40 jegyű SHA-1 érték a teljes tartalomból; egyedi, és bármilyen változásra teljesen más lesz. Általában 7 jegy elég belőle.
    2. A commitok a szülő hash-ével láncot alkotnak: egy régi commit módosítása az összes utána következő hash-ét megváltoztatja.
    3. git log + --oneline, -n, --stat, -p, --author, --grep, -- fájl. Hosszú kimenetből q-val lépsz ki.
    4. Hivatkozás: hash, HEAD, ágnév, HEAD~n, HEAD^.
    5. git show: egy commit változása · git diff: munkakönyvtár ↔ index · git diff --staged: index ↔ HEAD · git diff a b: két commit · git blame: ki írta a sort.

    A következő fejezetben megtanuljuk, hogyan tartsuk távol a repótól azokat a fájlokat, amelyeknek nincs benne helyük: .gitignore.