Vezérlőpult
7. A jó commit · Helyi munka: az első commitok

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

A jó commit

Commitolni már tudsz, most megtanulod, hogyan jól kell. Mekkora legyen egy commit, mit írj az üzenetébe, és hogyan segít a Conventional Commits szabvány, hogy a projekt története évek múlva is olvasható legyen, neked és a csapatodnak is.

CLI + DesktopÜzenet-ellenőrzőCommit-tervezőSzimulátor15 kvízkérdés

Tanulási célok

1Miért számít?

A commitok története a projekt naplója. Hónapok múlva ebből derül ki, mikor és miért változott valami, ki és melyik változtatással rontott el valamit, és mit lehet biztonságosan visszavonni. Hasonlítsd össze ugyanannak a projektnek két változatát:

✗ Nehezen használható történet

$ git log --oneline
e41b7c2 javítás
9a0d3f1 asdf
5c27e8a módosítások
b81f0d4 péntek délutáni munka
2f6a9c3 first

✓ Olvasható történet

$ git log --oneline
e41b7c2 fix: kosár végösszegének kerekítése
9a0d3f1 feat: e-mail-cím ellenőrzése az űrlapon
5c27e8a feat: kapcsolat űrlap
b81f0d4 style: menü színeinek egységesítése
2f6a9c3 Kezdőlap első változata

A bal oldaliból semmi nem derül ki. A jobb oldaliból egy pillantással látszik, mikor jelent meg az űrlap, és melyik commit javította a kosarat. Ha a kerekítés miatt új hiba jelentkezik, pontosan tudod, melyik commitot kell megnézni vagy visszavonni (10. fejezet).

2Az atomi commit

Az atomi commit egyetlen, logikailag összetartozó változást tartalmaz, és a projekt utána is működőképes. Nem túl kicsi (fél változtatás) és nem túl nagy (három különböző dolog egyben).

Túl kicsiJó méretTúl nagy
Példa„HTML az űrlaphoz”, majd külön „CSS az űrlaphoz”, pedig CSS nélkül az űrlap használhatatlan „Kapcsolat űrlap”: HTML, CSS és menüpont együtt„Űrlap, elírások javítása, README, új színek”
Gonda köztes commit félkész, nem működő állapot—nem lehet csak az egyik részét visszavonni, és nehéz átnézni

Mikor commitolj?

💡 A STAGING ITT SEGÍT

Ha közben több dolgon is dolgoztál, a git add-dal (Desktopban a pipákkal) szétválogathatod a változásokat: előbb csak a hibajavítás fájljait készíted elő és commitolod, aztán a többit. Ezért van előkészítési terület (6. fejezet).

⚠️ NE KEVERD A FORMÁZÁST A TARTALOMMAL

Ha az egész fájlt újraformázod (behúzások, szóközök), és közben egy sort érdemben is módosítasz, a változáslistában száz sor változik, és a fontos egy sor elveszik közöttük. A formázás kerüljön külön commitba (pl. style: kódformázás).

3Commit-tervező

Egy délután alatt ezeket a változtatásokat végezted el a webshopon. Bontsd őket jó, atomi commitokra! Jelöld ki, amelyek együtt egy commitba valók, írj hozzá üzenetet, és kattints a Commit gombra.

Mi kerüljön egy commitba?

Nem commitolt változások
    git log --oneline
    
            

    4A commitüzenet felépítése

    A commitüzenet a tárgysorból, egy üres sorból és a nem kötelező törzsből áll, a végén esetleg lábléccel:

    fix: kosár végösszegének kerekítése egész forintratárgysor (≤ 50 karakter)
    üres sor — kötelező, ha van törzs
    A kedvezmény után a végösszeg tizedes fillért is tartalmazott, amit a fizetési szolgáltató elutasított. A számítás végén most Math.round kerekít egész forintra.törzs: MIT és MIÉRT (≈ 72 karakteres sorok)
    Refs: #12lábléc (nem kötelező): hivatkozások

    Sok változtatáshoz elég egyetlen jó tárgysor. A törzs akkor kell, ha van mit megmagyarázni.

    5A jó üzenet szabályai

    1. Legyen konkrét. Mi változott? „javítás”, „update”, „módosítások” helyett: „Kosár végösszegének kerekítése”.
    2. A tárgysor legyen rövid: legfeljebb kb. 50 karakter (72 a felső határ, efölött a felületek levágják).
    3. Nagybetűvel kezdődjön, és ne legyen a végén pont. (A Conventional Commits típusa kisbetűs: feat: ….)
    4. Egységes nyelvtani forma. Angolul a felszólító mód a szokás: Add, Fix, Remove („ha alkalmazod, ez a commit … Add contact form”). Magyarul jól működik a főnévi szerkezet: „Kapcsolat űrlap hozzáadása”, „Kerekítési hiba javítása”. Egy projekten belül egyféle legyen.
    5. Egy commit, egy dolog. Ha a tárgysorba „és”-t kell írnod két külön változás közé, valószínűleg két commit kellene.
    6. A fájl nevét ne írd ki magában. Az „index.html frissítve” semmit nem mond, a módosított fájlokat a Git úgyis mutatja. Azt írd le, mi változott.
    7. Tárgy és törzs között üres sor legyen, a törzs sorai kb. 72 karakterig érjenek.
    Rossz üzenetek és egy lehetséges javításuk
    ✗ RosszMi a baj?✓ Jobb
    javításMit javított?Kosár végösszegének kerekítési hibája
    asdfgh · wip · ...semmitmondóTermékkártya elrendezése flexboxszal
    index.html frissítvecsak a fájlnévKapcsolat menüpont a navigációban
    Űrlap, színek, elírás és READMEnégy dolog egy commitbannégy külön commit
    Javítottam a hibát amit Peti talált tegnap az órán a kosárnál.túl hosszú, pont a végén, a lényeg („mi volt a hiba”) hiányzikKosár: negatív darabszám tiltása
    péntek délutáni munkaaz idő nem információa tényleges változások, külön commitokban

    Melyik a jobb commitüzenet?

    Mindkét üzenet ugyanarról a változásról szól. Melyiket választanád?

    1 / 8Pontszám: 0
    …

    6Conventional Commits

    A Conventional Commits (conventionalcommits.org) egy elterjedt szabvány, amely egységes szerkezetet ad a tárgysornak. Egy pillantásra látszik belőle a változás típusa, és programok is fel tudják dolgozni, például automatikus változásnaplót vagy verziószámot készíthetnek belőle.

    <típus>[(hatókör)][!]: <rövid leírás>
    
    [törzs]
    
    [lábléc]
    TípusMikor?Példa
    featúj funkciófeat: kapcsolat űrlap
    fixhibajavításfix(kosar): negatív darabszám tiltása
    docscsak dokumentáció (README, megjegyzések)docs: telepítési lépések a README-ben
    styleformázás, a működés nem változikstyle: behúzások egységesítése
    refactorátszervezés, a viselkedés nem változikrefactor: árkalkuláció külön függvénybe
    testtesztektest: kosár összegének tesztjei
    perfgyorsításperf: képek késleltetett betöltése
    build · cifordítás, függőségek · automatizálás (27. fejezet)ci: tesztek futtatása minden pushnál
    choreegyéb karbantartáschore: .gitignore bővítése
    ℹ️ KÖTELEZŐ?

    Nem, a Git bármilyen üzenetet elfogad. A Conventional Commits egy csapatszabály. Sok nyílt forráskódú projekt és cég használja, és iskolai csapatmunkában is jó közös nyelv. Amit egy projektben megszavaztatok, azt következetesen tartsátok be.

    7Üzenet-ellenőrző

    Írj be egy commitüzenetet, és az ellenőrző megmondja, mennyire felel meg a fenti szabályoknak. Az első sor a tárgysor; ha törzset is írsz, hagyj ki előtte egy üres sort.

    Mit szólna hozzá egy kódáttekintő?

    0 / 50
    Minták:

      8Többsoros üzenet a gyakorlatban

      Hol?Hogyan?
      CLI két -mgit commit -m "fix: kosár kerekítése" -m "A kedvezmény után tizedes fillér maradt."
      Az első -m a tárgysor, a második a törzs; a Git közéjük teszi az üres sort.
      CLI szerkesztőgit commit (-m nélkül): megnyílik a VS Code (core.editor). 1. sor: tárgy, 2. sor: üres, utána a törzs. Mentés, majd a fül bezárása. A #-tel kezdődő sorokat a Git kihagyja.
      Desktop GitHub DesktopSummary = tárgysor, Description = törzs. Ha a Summary 50 karakternél hosszabb, a Desktop figyelmeztet, hogy a többit a Description mezőbe írd.
      Desktop VS CodeA Source Control üzenetmezőjében Enter-rel új sort kezdhetsz. Az első sor a tárgy; hagyj egy üres sort a törzs előtt.
      💡 PÁROS MUNKA: TÁRSSZERZŐ

      Ha ketten dolgoztatok egy változáson, a GitHub Desktopban az üzenetmező alatti Add co-authors ikonnal felveheted a társad. A Desktop ilyenkor egy Co-authored-by: Tóth Péter <toth.peter@pelda.hu> láblécsort ír az üzenetbe, és a GitHub mindkettőtök profilján jóváírja a commitot. Parancssorból ugyanezt a sort kézzel írhatod a törzs végére.

      ⚠️ ELÍRTAD AZ ÜZENETET?

      A legutolsó commit üzenete kijavítható: git commit --amend -m "jó üzenet". Ezt csak addig tedd, amíg a commitot nem töltötted fel (push). A részleteket a 10. fejezetben tanuljuk.

      9Gyakorlás a szimulátorban

      A weboldal repóban három változás vár commitolásra: új README, és egy új menüpont, amely két fájlt érint. Készíts belőlük atomi commitokat jó üzenettel! A szimulátor az üzenet-ellenőrző szabályaival ellenőrzi az üzeneteidet. Hibás üzenet esetén a küldetés nem teljesül, ilyenkor készíts új commitot.

      PowerShell + Git

      Windows PowerShell
      Küldetések 0 / 6

        10Feladatok

        Gyakorló feladatok

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

        7.1⭐Web

        Nézd meg a microsoft/vscode vagy a git/git repó commitlistáját a GitHubon! Gyűjts ki három jó üzenetet. Mi a közös bennük (hossz, forma, nyelvtani alak)? Használnak-e törzset?

        7.2⭐

        Írd át jó üzenetté: update · style.css · hiba javítva. · minden ami kellett · Megcsináltam a logint és a regisztrációt és kijavítottam a láblécet! Ha kell, bontsd több commitra.

        7.3⭐

        Az Üzenet-ellenőrzőben, bekapcsolt Conventional Commits móddal írj hibátlan üzenetet egy új funkcióhoz, egy hibajavításhoz és egy README-módosításhoz!

        7.4⭐⭐CLI

        A saját repódban egyszerre módosítsd a fejlécet, javíts egy elírást a láblécben, és bővítsd a README-t! Készíts belőlük három atomi commitot a git add <fájl> segítségével, majd nézd meg a git log --oneline-t.

        7.5⭐⭐CLI

        Írj többsoros üzenetet a szerkesztőben (git commit -m nélkül)! Utána nézd meg a git log és a git log --oneline kimenetét. Hol látszik a törzs, és hol nem?

        7.6⭐⭐Desktop

        A GitHub Desktopban írj 50 karakternél hosszabb Summaryt! Mit jelez a program? Tedd át a részleteket a Descriptionbe. Ha párban dolgoztok, vegyétek fel egymást társszerzőnek, és nézzétek meg a kész üzenetet a History fülön.

        7.7⭐⭐⭐

        Csapatban készítsetek egyoldalas commit-szabályzatot a közös projekthez (nyelv, forma, típusok, méret, példák), és tegyétek egy CONTRIBUTING.md fájlba a repóban. Commitoljátok a saját szabályaitok szerint!

        11Ö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.

        12Fogalomtár

        FogalomJelentés
        atomi commitegyetlen logikailag összetartozó, önmagában működő változást tartalmazó commit
        tárgysor (subject)az üzenet első sora, kb. 50 karakter; ez látszik a listákban
        törzs (body)az üres sor utáni rész: mit és miért változott
        lábléc (footer)hivatkozások a végén: Refs: #12, Co-authored-by: …, BREAKING CHANGE: …
        Conventional Commitsszabvány a tárgysor formájára: típus(hatókör): leírás
        feat · fix · docsúj funkció · hibajavítás · dokumentáció
        style · refactor · choreformázás · átszervezés változatlan működéssel · karbantartás
        breaking change (!)visszafelé nem kompatibilis változás
        társszerző (co-author)a commit további szerzője a Co-authored-by: láblécsorral
        git commit --amenda legutolsó commit javítása, csak push előtt (10. fejezet)

        13Összegzés

        1. Egy commit = egy logikai változás, amely után a projekt működik. A staging segít szétválogatni.
        2. Üzenet: tárgysor (≤ 50 karakter, konkrét, nagybetű, nincs pont) + üres sor + törzs (mit és miért).
        3. Kerüld a semmitmondó szavakat („javítás”, „update”, „wip”), a puszta fájlnevet és az „és”-sel összefűzött változásokat.
        4. Conventional Commits: feat, fix, docs, style, refactor, test, chore…, opcionális hatókör, ! a nem kompatibilis változáshoz.
        5. Többsoros üzenet: két -m, a szerkesztő, vagy Desktopban a Summary és a Description.

        A következő fejezetben megtanuljuk olvasni a történetet: git log, git show, git diff.