Conventii Git
Atomic commits, conventional commits si disciplina care mentine un istoric curat.
Principiul: Atomic Commits
Fiecare commit contine o singura schimbare logica. Nu un mix de features, bug fixes si refactoring — o singura schimbare coerenta care poate fi inteleasa, revertata sau cherry-pick-ata independent.
⚠️ Anti-pattern
Conventional Commits
Mesajele de commit urmeaza formatul Conventional Commits:
feat:Functionalitate nouafix:Bug fixdocs:Documentatiechore:Maintenance, toolingrefactor:Restructurare fara schimbare comportamenttest:Teste noi sau fix testeMesajul: DE CE, nu CE
Diff-ul arata ce s-a schimbat. Mesajul de commit trebuie sa explice de ce.
# GRESIT — descrie CE (redundant cu diff-ul)
fix: change PASS++ to PASS=$((PASS + 1))
# CORECT — descrie DE CE
fix: handle ((PASS++)) exit code 1 when PASS=0 with set -eWorkflow-ul de commit in PAUL
In ciclul PAUL, commit-urile se fac la fiecare task completat in faza APPLY:
- Task completat + test trece →
git addfisierele relevante - Scrie mesaj conventional commit
git commit— lasa hook-urile sa ruleze (nu--no-verify!)- Daca hook-ul esueaza → fix-eaza problema → commit NOU (nu
--amend)
🚫 Nu folosi --no-verify
--no-verify. Hook-urile exista pentru un motiv.ℹ️ Nu folosi --amend dupa esec
--amend, modifici commit-ul anterior (care e corect!) — risc de pierdere date. Fa un commit NOU dupa fix.Exemplu din proiect
Istoricul git al acestui proiect demonstreaza principiile:
3fec135 chore: clean up stale directories
f004d84 docs: complete UNIFY for Phase 4
37ba2a7 docs: add tutorial documentation
f60dfc2 docs: complete UNIFY phase — update STATE, ROADMAP
c028071 feat: add structure validation script with TDD testsFiecare commit e atomic (o schimbare logica), conventional (prefix corect), si descriptiv (explica de ce, nu doar ce).
Reguli de staging
- Prefer
git add fisier1.ts fisier2.tsfata degit add . - Nu commit-ezi fisiere sensibile (
.env, credentials) - Verifica cu
git statussigit diff --stagedinainte de commit
Exercitiu
Ruleaza git log --oneline in acest proiect. Identifica: cate commit-uri sunt feat: vs docs:? Fiecare commit e atomic? Mesajele explica de ce, nu doar ce?
Ce ar trebui sa explice mesajul unui commit?