Skip to main content

Worktrees — 3 features en même temps sans devenir fou

Durée : 35 minutes
  • 5 min : concept + démonstration
  • 25 min : TP
  • 5 min : patterns avancés + challenges

Le scénario classique du vendredi

Il est 14h. Vous êtes sur feature/dark-mode, vous avez 8 fichiers modifiés en cours. Votre manager arrive en courant :

"Le login est cassé en prod. Fix urgent."

Vos options actuelles :

SolutionPourquoi c'est nul
git stashPerd l'état de votre éditeur, oublie les fichiers non-trackés, vous oublierez ce stash dans 3 jours
Commit WIPgit commit -m "WIP ne pas merger" pollue l'historique et vous fait passer pour quelqu'un qui ne sait pas utiliser Git
git clone à nouveauVous re-téléchargez tout, vous réinstallez les node_modules — 10 minutes perdues pour un fix de 2 lignes

La vraie solution : git worktree

Un worktree est un répertoire de travail supplémentaire lié à votre dépôt. Chaque worktree a sa propre branche et son propre index, mais ils partagent tous la même base d'objets Git (commits, blobs, trees).

Pas de duplication. Pas de re-téléchargement. Pas de node_modules à réinstaller.

~/git-workshop/ng-baguette-conf/.git/   ← tous les objets Git (partagés)
~/git-workshop/ng-baguette-conf/ ← worktree principal (feature/dark-mode)
~/git-workshop/ng-baguette-hotfix/ ← worktree lié (fix/login-prod)
~/git-workshop/ng-baguette-export/ ← worktree lié (feature/export-csv)

Trois branches, trois terminaux, zéro stash.

Les commandes essentielles

# Ajouter un worktree sur une branche existante
git worktree add <chemin> <branche>

# Ajouter un worktree ET créer une nouvelle branche
git worktree add -b <nouvelle-branche> <chemin> [<point-de-départ>]

# Lister tous les worktrees
git worktree list

# Supprimer un worktree
git worktree remove <chemin>

# Nettoyer les références orphelines
git worktree prune