Claude Code v2.1
Modulul 10 · 10 min

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

Commit-urile mari cu multiple concerns sunt un anti-pattern explicit in CLAUDE.md. "feat: implement entire Phase 1" — gresit. "feat: add validation for email field" — corect.

Conventional Commits

Mesajele de commit urmeaza formatul Conventional Commits:

feat:Functionalitate noua
feat: add structure validation script
fix:Bug fix
fix: handle ((PASS++)) exit code in bash
docs:Documentatie
docs: complete UNIFY for Phase 4
chore:Maintenance, tooling
chore: clean up stale directories
refactor:Restructurare fara schimbare comportament
refactor: extract validation into separate module
test:Teste noi sau fix teste
test: add edge case for empty directory

Mesajul: 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 -e

Workflow-ul de commit in PAUL

In ciclul PAUL, commit-urile se fac la fiecare task completat in faza APPLY:

  1. Task completat + test trece → git add fisierele relevante
  2. Scrie mesaj conventional commit
  3. git commit — lasa hook-urile sa ruleze (nu --no-verify!)
  4. Daca hook-ul esueaza → fix-eaza problema → commit NOU (nu --amend)

🚫 Nu folosi --no-verify

Daca pre-commit hook-ul esueaza, fix-eaza problema reala. Nu sari peste verificare cu --no-verify. Hook-urile exista pentru un motiv.

ℹ️ Nu folosi --amend dupa esec

Cand un pre-commit hook esueaza, commit-ul NU s-a facut. Daca folosesti --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 tests

Fiecare 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.ts fata de git add .
  • Nu commit-ezi fisiere sensibile (.env, credentials)
  • Verifica cu git status si git diff --staged inainte 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?

Verifica-ti cunostintele

Ce ar trebui sa explice mesajul unui commit?