Mémo Git · Worktrees
Comprendre les worktrees
git worktree list
git worktree ajoute une copie de travail au même dépôt, dans un autre dossier et sur une autre branche. Commits, branches, tags et stashs sont partagés, sans push ni fetch. Chaque worktree garde ses fichiers, son index et sa branche courante.
Ce que ça fait
Un worktree est une copie de travail supplémentaire du même dépôt, dans un autre dossier et sur une autre branche. Tous partagent les commits, les branches, les tags, les remotes et les stashs : un commit fait dans l'un est aussitôt visible dans les autres, sans push ni fetch. Chacun garde ses propres fichiers, son index et sa branche courante. Le dossier d'origine est le worktree principal ; dans les autres, .git est un simple fichier qui pointe vers le dépôt principal, sans second historique.
Un cas d'usage
Tu es au milieu d'une fonctionnalité quand un correctif urgent arrive : au lieu de stasher et de changer de branche, tu ouvres le correctif dans un second dossier, sans toucher à ton travail en cours.
Attention : Seuls les fichiers versionnés sont présents dans un nouveau worktree : les fichiers ignorés (node_modules, .env, builds…) n'y sont pas, il faut les réinstaller ou les recopier.
En ligne de commande
git worktree list- Liste les worktrees, avec leur dossier, leur commit et leur branche.
git worktree add <dossier> <branche>- Extrait une branche existante dans un nouveau dossier.
git worktree add -b <branche> <dossier>- Crée une branche et l'extrait dans un nouveau dossier.
git worktree remove <dossier>- Supprime un worktree. La branche reste.
Dans Merathon
- Déplie la section « Worktrees » de la barre latérale : chaque ligne indique la branche extraite.
- Le worktree affiché est mis en évidence, et celui d'origine porte la mention « principal ».
- Survole une ligne pour voir son dossier.
Questions fréquentes
Quelle différence avec un second clone ?
Un clone a son propre historique, à synchroniser avec fetch et push. Un worktree partage celui du dépôt : un commit y est aussitôt visible depuis les autres, et rien n'est téléchargé en double.
Quelle différence avec un stash ?
Le stash met tes modifications de côté pour libérer la copie de travail. Le worktree les laisse où elles sont et ouvre l'autre branche ailleurs : utile pour une compilation longue ou pour comparer deux branches.
Pourquoi mon node_modules n'est-il pas dans le worktree ?
Un nouveau worktree ne contient que les fichiers versionnés. Les fichiers ignorés (node_modules, .env, builds) sont à réinstaller ou à recopier.