Avez-vous déjà vécu cette situation ? Vous développez une nouvelle fonctionnalité complexe et soudain un Bug urgent apparaît, nécessitant une correction immédiate.
Pour changer de branche, vous êtes contraint d’exécuter à contre-cœur un git stash pour cacher votre code incomplet. Après avoir corrigé le Bug et être revenu, vous devez exécuter prudemment git stash pop, risquant parfois le cauchemar des conflits de code (conflict).
En réalité, Git propose depuis longtemps un outil extrêmement puissant pour résoudre ce problème : Git Worktree.
Dites adieu aux changements de branche chaotiques et au Stash, et adoptez le développement multithread avec Worktree
Cet article vous explique en détail son fonctionnement interne et son utilisation pratique.
Quelle est la différence entre Git Worktree et Git Branch ?
Pour comprendre Git Worktree, clarifions d’abord sa différence avec Git Branch.
On peut comparer la gestion de versions à la lecture d’un livre papier :
Commitest l’édition / la version du livreBranchest le marque-page inséré à une page donnéeWorktreeest le bureau de travail sur lequel vous ouvrez le livre
Dans l’approche traditionnelle, nous ne disposons que d’un seul bureau. Chaque fois que nous voulons changer de marque-page, nous devons ranger tous les papiers en cours de modification sur la table ou les cacher dans un tiroir (c’est le rôle de git stash).
En revanche, Git Worktree vous permet de posséder plusieurs bureaux de travail indépendants en même temps.
| Élément de comparaison | Git Branch | Git Worktree |
|---|---|---|
| Concept de Workspace | Partage un seul répertoire physique de travail | Possède plusieurs répertoires physiques de travail indépendants |
| Coût du changement de branche | Nécessite un commit, stash ou sauvegarde | Sans stash ; il suffit de changer de répertoire |
| Isolation & Sécurité | Les fichiers non commités peuvent causer des conflits ou résidus | Répertoires totalement isolés ; les modifications n’interfèrent pas |
| Historique des modifications | Partage l’historique de Commit et les branches Git | Partage l’historique de Commit et les branches Git |
La branche active, la zone de transit (Staging Area) et les modifications non commitées de chaque Worktree sont complètement indépendantes, mais elles partagent l’ensemble de l’historique des Commits et des branches.
Branch est le marque-page de version, tandis que Worktree est le bureau de travail physique
Ainsi, lorsque vous devez changer de tâche, il vous suffit d’ouvrir un autre dossier sans toucher du tout à votre état de développement actuel.
Comment commencer à utiliser Git Worktree ?
Lors de l’adoption de Git Worktree dans des projets réels, une bonne organisation des répertoires rend le développement bien plus fluide.
Il est recommandé de conserver le répertoire du projet initialement cloné avec git clone comme le quartier général propre main, et de placer les nouveaux répertoires Worktree à l’extérieur du projet (par exemple ../my-app-worktrees), évitant ainsi les erreurs de scan récursif par les outils de développement.
Le flux de commandes habituel est le suivant :
| Flux | Commande |
|---|---|
| 1. Créer un nouveau Worktree et simultanément une nouvelle branche | git worktree add ../my-app-worktrees/feature-login -b feature-login |
| 2. Afficher la liste de tous les Worktrees actifs | git worktree list |
Git Worktree est particulièrement adapté à la gestion des tâches de développement d’un AI Agent.
Vous pouvez attribuer un répertoire Worktree indépendant à AI Agent pour qu’il modifie et teste le code en toute liberté, tandis que les développeurs humains effectuent la revue de code (Review) et les tests dans un autre Worktree.
Donnez un Worktree indépendant à l’AI Agent pour que le développement IA et la revue humaine s’exécutent en parallèle
Les deux fonctionnent dans leurs répertoires physiques respectifs, de manière sûre et claire.
Comment fusionner et nettoyer en toute sécurité après le développement ?
Une fois le développement terminé dans un Worktree indépendant, comment fusionner les résultats et faire le nettoyage ?
Gardez un concept important en tête : Le répertoire Worktree lui-même n’a pas besoin d’être fusionné, ce qui doit vraiment être fusionné, c’est la Branch.
Il vous suffit de revenir au répertoire de travail main et d’exécuter git merge sur la branche de fonctionnalité correspondante pour terminer l’intégration.
Pour le nettoyage, suivez la procédure standard en deux étapes :
| Étape | Commande |
|---|---|
| 1. Supprimer le répertoire physique du Worktree | git worktree remove ../my-app-worktrees/feature-login |
| 2. Supprimer la branche de fonctionnalité terminée | git branch -d feature-login |
Supprimez d’abord le répertoire Worktree, puis supprimez la Branch
Veillez à toujours utiliser la commande git worktree remove pour le nettoyage, au lieu de supprimer manuellement le dossier dans le gestionnaire de fichiers.
Quels sont les pièges courants lors de l’utilisation de Git Worktree ?
Bien que Git Worktree soit extrêmement pratique, il comporte quelques pièges auxquels il faut prêter attention.
Piège 1 : Les modifications non commitées seront perdues
Bien que la suppression d’un Worktree ne supprime pas la Branch elle-même, si vous avez encore des modifications non commitées dans ce répertoire, la suppression forcée du répertoire Worktree entraînera la perte définitive de ces modifications.
Piège 2 : Conflit d’occupation de branche
Le mécanisme de protection de Git n’autorise pas le Checkout de la même Branch simultanément dans deux Worktrees différents. Si vous essayez de basculer vers une branche déjà occupée dans un second Worktree, Git bloquera l’action et affichera un message d’erreur.
Forcer la suppression d’un Worktree entraîne la perte des modifications non sauvegardées par Commit
En maîtrisant ces caractéristiques et principes, vous éviterez facilement ces pièges.
Conclusion
Grâce à Git Worktree, nous pouvons dire adieu aux changements de branche chaotiques et au processus git stash, et réaliser un véritable développement multithread.
La prochaine fois que vous faites face à une correction de Bug urgente, que vous développez plusieurs fonctionnalités en parallèle ou que vous attribuez des tâches de code à un AI Agent, essayez d’ouvrir un nouveau bureau de travail !