Commitolni — a változtatások rögzítése a Git verziókezelő rendszerben, ami egy mentési pontot hoz létre a projekt történetében. Minden commit tartalmaz egy hash-t, szerzőt, dátumot és a változtatások leírását. A GitHub Octoverse 2024 adatai szerint naponta több mint 50 millió commit jön létre a világon. Commit — a verziókezeléssel való munka alapegysége, amely nélkül elképzelhetetlen a modern szoftverfejlesztés.
Főbb pontok
A commit Git-ben egy objektum, amely a projekt fájljainak állapotát tárolja egy adott időpontban. Minden commit tartalmazza az összes követett fájl pillanatképét, egy hivatkozást a szülő commitra és metaadatokat. Más verziókezelő rendszerekkel ellentétben a Git content-addressable storage-t használ — minden objektum a tartalmának SHA-1 hash-je alapján azonosítható.
Amikor a fejlesztő commitolja a változtatásokat, a Git létrehoz egy commit objektumot, amely tárolja: tree objektum (fájlszerkezet), szülő commit hash, szerző, committer, dátum és üzenet. Ez az objektum megváltoztathatatlan — létrehozás után a commit nem módosítható a hash megváltoztatása nélkül. Éppen ez a megváltoztathatatlanság garantálja a projekt történetének integritását.
# Változtatások előkészítése és commitolás
git add index.html style.css
git commit -m "Fix responsive layout on mobile devices"
# Commit részleteinek megtekintése
git log --oneline -3
git show HEAD
# Összes változtatás előkészítése és commitolás egy lépésben
git commit -a -m "Update dependencies to latest versions"
A commitok irányított aciklikus gráfot (DAG) alkotnak, ahol minden új commit az előzőre hivatkozik. Ez lehetővé teszi a történetben való navigálást, a változtatások visszavonását és a kódbázis fejlődésének elemzését. A Git DAG szerkezetének megértése — a haladó commit munka alapja.
A commit folyamata Git-ben két szakaszból áll: a változtatások hozzáadása a staging area-hoz (index) és a commit létrehozása. A staging area lehetővé teszi a fejlesztő számára, hogy kiválassza, mely változtatások kerüljenek a commitba, még akkor is, ha sok fájl módosult a munkakönyvtárban.
Az atomicitás szabálya — a jó commit kulcsfontosságú elve. Minden commitnak egy logikai változtatást kell tartalmaznia. Ha a fejlesztő hibát javít és refaktorálja a kódot — ez két különböző commit. Az atomi commitok egyszerűsítik a kódellenőrzést, a változtatások visszavonását és a történet elemzését.
Commitolás előtt érdemes ellenőrizni: maradt-e a kódban hibakeresési kimenet, kommentezett blokk vagy véletlen változtatás. Ehhez a git diff --cached parancsot használjuk, amely megmutatja, pontosan mi kerül a commitba. További ellenőrzés a git status segítségével megjeleníti a staging area fájljainak listáját.
A commit üzenet — a változtatás dokumentációja a jövőbeli fejlesztők számára. Egy jó üzenet válaszol a kérdésekre: mi változott és miért. A Conventional Commits konvenció (Angular csapat, 2016) számos projekt számára szabvánnyá vált és meghatározza a formátumot: típus(terület): leírás.
| Típus | Cél | Példa |
|---|---|---|
| feat | új funkció | feat(api): add user registration endpoint |
| fix | hibajavítás | fix(auth): resolve token refresh issue |
| refactor | refaktorálás viselkedésváltoztatás nélkül | refactor(core): extract payment validator |
| docs | dokumentáció | docs(readme): update installation guide |
| test | tesztek hozzáadása | test(cart): add unit tests for checkout |
Egy jó commit üzenet címsorból (max 50 karakter) és törzsből (opcionális, soronként max 72 karakter) áll. A címsor felszólító módban íródik: „Add” nem „Added” vagy „Adds”. A Capitalization és pont a címsor végén nem használatos — ez a Git nemzetközi egyezménye.
Rossz üzenet: „fix things” vagy „update” — nem hordoz információt. Egy hónap múlva a fejlesztő nem fogja érteni, mi változott pontosan és miért. Jó üzenet: „fix(payment): handle timeout in stripe callback” — azonnal világos, hol és mit javítottak.
A fejlesztők, különösen a kezdők, gyakran követnek el tipikus hibákat commitoláskor. A leggyakoribb — túl nagy commit, amelyben tucatnyi változtatás keveredik. Az ilyen commitot nem lehet részlegesen visszavonni, a kódellenőrzés pedig kínszenvedéssé válik.
A második leggyakoribb hiba — rossz commit üzenet. Az olyan üzenetek, mint „fix”, „update”, „changes” vagy „wip” nem adnak kontextust a jövőbeli fejlesztőknek. Hat hónap múlva senki sem fogja emlékezni, mit javítottak pontosan. A szabály egyszerű: képzeld el, hogy egy év múlva nézed a történetet és próbálsz megtalálni egy konkrét változtatást.
Harmadik hiba — nem lefordított vagy nem működő kód commitolása. Commit után a kódnak legalább fordulnia kell. Nem törött build — alapvető követelmény minden közös ágba kerülő commithoz. Ehhez commit előtt a build és tesztek futtatása szükséges.
Negyedik hiba — commit bizalmas adatokkal. API kulcsok, jelszavak és tokenek nem kerülhetnek a Git történetbe. Ha egy titok már commitolva van, nem elég egyszerűen törölni egy új commitban — a teljes történetből ki kell törölni a git filter-branch vagy BFG Repo-Cleaner segítségével.
A Git eszközöket biztosít a commit történet kezeléséhez. Az egyik leghasznosabb a git commit --amend, amely lehetővé teszi az utolsó commit kiegészítését új változtatásokkal vagy az üzenet javítását. Ez kényelmes, ha a fejlesztő elfelejtett hozzáadni egy fájlt vagy hibázott az üzenetben.
# Utolsó commit üzenet javítása
git commit --amend -m "fix(auth): correct token validation logic"
# Kihagyott fájl hozzáadása az utolsó commithoz
git add missed-file.txt
git commit --amend --no-edit
# Interaktív rebase az utolsó 3 commithoz
git rebase -i HEAD~3
Az Interactive rebase — egy hatékony eszköz a történet átírására. Lehetővé teszi commitok összevonását (squash), üzenetek módosítását (reword), sorrend változtatását (reorder) és commitok törlését (drop). Azonban a rebase megváltoztatja a történetet, ezért csak olyan helyi commitokra alkalmazzák, amelyek még nincsenek feltolva a távoli repozitóriumba.
A commitok visszavonására két megközelítés létezik. git revert létrehoz egy új commitot, amely visszavonja az előző változtatásait — biztonságos módszer, amely megőrzi a történetet. A git reset törli a commitokat a történetből — veszélyes, ha a commitok már fel lettek tolva. Csapatmunkában csak a git revert használatos a publikált commitok visszavonására.
Gyakran Ismételt Kérdések
Commitolni annyit tesz, mint létrehozni egy mentési pontot a változtatásokról Git-ben. A commit rögzíti a fájlok aktuális állapotát a projekt történetében annak leírásával, hogy mi és miért változott. Minden commitnak egyedi azonosítója (SHA-1 hash) van, és egy megszakíthatatlan változtatási lánc része.
Ajánlott minden logikailag befejezett változtatás után commitolni, még ha kicsi is. Optimális gyakoriság — 1 commit feladatonként vagy javításonként. Nem érdemes 5 percenként commitolni, de nem szabad napokig halmozni a változtatásokat egyetlen commit nélkül sem.
Az atomi commit egy logikai változtatást tartalmaz — egy feladatot, egy hibajavítást vagy egy új funkciót. Nem keveri a különböző változtatásokat egy commitban. Az atomi commitok előnyei: egyszerű visszavonás, áttekinthető történet és könnyű kódellenőrzés.
Publikált commit visszavonásához használd a git revert
Igen, a távoli repozitóriumba való feltolás előtt. Használd a git commit --amend parancsot az utolsó commit módosításához vagy a git rebase -i parancsot több commit módosításához. Push után a történet módosítása nem ajánlott — problémákat okozhat más fejlesztőknél, ha ők már feltolták a változtatásaikat.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is