În fluxurile clasice de lucru, dacă lucrezi la o funcționalitate complexă și apare un bug critic în producție (hotfix), ești forțat să faci git stash, să comuți ramura cu git checkout, să rezolvi bugul și apoi să revii. Această comutare resetază adesea cache-urile de build și reinstalează dependențele din `node_modules`.
Comanda git worktree rezolvă elegant această problemă: permite verificarea (checkout) mai multor ramuri în directoare fizice complet diferite de pe disc în același timp, partajând aceeași bază de obiecte `.git`.
Poți avea un director `proiect-main` pe ramura de producție și un alt director `proiect-feature` deschis în altă fereastră de VS Code sau Cursor, ambele comunicând cu același depozit local fără niciun consum suplimentar de lățime de bandă.
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
add |
Creează un director nou de lucru asociat ramurii specificate. |
list |
Afișează toate directoarele worktree active și ramurile atașate fiecăruia. |
remove |
Șterge un director worktree finalizat și eliberează starea internă. |
prune |
Curăță metadatele worktree-urilor ale căror directoare au fost șterse manual de pe disc. |
Exemple practice și cod
Exemplul 1: Adăugarea unui worktree separat pentru un hotfix urgent de producție
Cum se deschide ramura main într-un folder secundar fără a opri lucrul curent.
# În directorul proiectului unde lucrezi la o ramură nouă:
$ git worktree add ../proiect-hotfix main
Preparing worktree (checking out 'main')
HEAD is now at 8b4c21a Merge pull request #140
# Navigăm în noul director și rezolvăm problema:
$ cd ../proiect-hotfix
$ git commit -am "Fix vulnerabilitate sesiune"
$ git push origin main
# Curățăm worktree-ul când am terminat:
$ cd ../proiect-principal
$ git worktree remove ../proiect-hotfix
Rezultat & Impact
Rezolvare instantanee fără comutări de ramuri și fără pierdere de context local.
Greșeli frecvente și bune practici
- Încercarea de a face checkout pe o ramură care este deja deschisă activ într-un alt worktree, ceea ce Git refuză pentru a preveni coruperea istoricului.
- Ștergerea directorului worktree doar prin `rm -rf` fără a rula ulterior `git worktree prune`.