git worktree : travailler sur plusieurs branches en même temps
Vous êtes en train de développer une fonctionnalité sur feature/nouveau-module. Un bug critique remonte en production. Pour le corriger, vous devez basculer sur main — mais votre travail en cours n’est pas commitable. Vous faites git stash, basculez, corrigez, revenez, git stash pop… et parfois ça se passe mal.
git worktree résout ce problème autrement : plusieurs branches peuvent être actives en même temps dans des dossiers séparés.
Ce que fait git worktree
Un worktree est un répertoire de travail associé à un dépôt git. Par défaut, un dépôt a un seul worktree. git worktree add en crée d’autres, chacun pointant vers une branche différente, tous partageant le même dépôt .git.
# Créer un worktree pour la branche main dans ../mon-projet-main
git worktree add ../mon-projet-main main
Vous avez maintenant deux dossiers :
~/Dev/mon-projet— votre branche feature en cours~/Dev/mon-projet-main— main, prêt à travailler
Chaque dossier est indépendant. Vous pouvez ouvrir les deux dans votre éditeur simultanément.
Cas d’usage typique : hotfix en urgence
# Vous êtes sur feature/nouvelle-api avec du travail en cours
git worktree add ../mon-projet-hotfix main
# Dans un autre terminal
cd ../mon-projet-hotfix
git checkout -b hotfix/bug-critique
# ... corrigez le bug
git commit -m "fix: corriger le bug critique"
git push
# Revenez à votre feature sans avoir rien touché
cd ../mon-projet
# Votre travail est intact, aucun stash nécessaire
Créer un worktree avec une nouvelle branche
# -b crée une nouvelle branche
git worktree add -b feature/ma-branche ../mon-projet-feature
Lister et supprimer les worktrees
# Voir tous les worktrees actifs
git worktree list
# /home/user/Dev/mon-projet abc1234 [feature/nouvelle-api]
# /home/user/Dev/mon-projet-main def5678 [main]
# Supprimer un worktree (depuis le repo principal)
git worktree remove ../mon-projet-main
# Forcer la suppression si le dossier a des modifications
git worktree remove --force ../mon-projet-main
# Nettoyer les références de worktrees supprimés manuellement
git worktree prune
Comparaison de code entre branches
# Créer un worktree pour comparer deux implémentations
git worktree add ../mon-projet-v2 feature/refacto-v2
# Ouvrez les deux dossiers dans VS Code
code ../mon-projet
code ../mon-projet-v2
Plus besoin de git diff pour tout comparer — vous voyez les deux versions en direct dans l’éditeur.
Worktree pour les reviews de PR
# Checkout d'une PR pour review sans toucher votre branche
git worktree add ../pr-review origin/feature/pr-a-reviewer
cd ../pr-review
npm install
npm run dev
# Testez la PR dans le navigateur
Points importants
Une branche ne peut être checkout que dans un seul worktree à la fois. Si vous avez déjà main dans un worktree, vous ne pouvez pas en créer un autre pour main.
Les worktrees partagent le même .git. Un commit dans un worktree est immédiatement visible dans les autres. Les stash aussi.
Les node_modules ne sont pas partagés. Chaque worktree est un dossier indépendant — vous devez relancer npm install dans chaque nouveau worktree si votre projet a des dépendances.
+ Les points forts
- Pas de stash — chaque branche garde son état exactement où vous l’avez laissé
- Parallélisme réel — deux serveurs de dev peuvent tourner simultanément sur deux branches
- Natif git — pas de dépendance externe, disponible depuis git 2.5 (2015)
- Partage du .git — les objets git sont partagés, pas de duplication des données du dépôt
- Idéal pour les monorepos — travailler sur deux packages simultanément sans jongler avec les branches
- Les points faibles
node_modulesà dupliquer — chaque worktree nécessite son proprenpm install, ce qui prend de la place et du temps- Confusion possible — deux dossiers qui ressemblent au même projet peuvent dérouter. Nommez bien vos worktrees
- Pas adapté aux changements de config — si votre branche change
package.jsonou la config webpack, les deux worktrees ne sont plus équivalents - Commandes depuis le bon répertoire — certaines commandes git (comme
git worktree remove) doivent être lancées depuis le repo principal
En résumé
git worktree est une fonctionnalité native de git sous-utilisée. Pour quiconque jongle régulièrement entre branches — hotfixes, reviews de PR, comparaisons — c’est une amélioration substantielle par rapport au cycle stash/checkout/stash-pop.
Voir aussi :