Pour travailler sur une deuxième branche sans perturber le checkout actuel de votre projet Mac, créez un worktree Git dans un dossier voisin. Chaque worktree possède ses propres fichiers et sa propre branche extraite, tout en partageant les données du dépôt avec le checkout principal. Créez-le depuis le Terminal, ouvrez son dossier dans le Finder ou votre éditeur, et supprimez-le avec Git une fois terminé. Documentation du worktree de Git
Ce qu'un worktree change
Un worktree vous offre un autre répertoire de travail connecté au même dépôt Git. Cela signifie que vous pouvez, par exemple, garder ouvert votre checkout actuel de main pendant qu'une branche de fonctionnalité dispose d'un dossier et de fichiers distincts. Les modifications apportées dans un répertoire de travail n'écrasent pas les fichiers extraits de l'autre. Git partage les données du dépôt, mais conserve séparément l'état spécifique au worktree, comme l'index et HEAD. Git : git-worktree
Les branches sont partagées entre les worktrees, et une branche locale ne peut généralement pas être extraite dans deux worktrees à la fois. Les worktrees sont adaptés à des tâches distinctes et simultanées ; ce ne sont pas des clones indépendants du dépôt. Les fichiers ignorés par Git, tels que la configuration locale ou les sorties de build, peuvent devoir être créés séparément dans le nouveau dossier.
Créer un worktree de fonctionnalité sur macOS
Ouvrez le Terminal et placez-vous dans le répertoire de votre projet existant. Remplacez my-app par le nom du répertoire de votre dépôt. L'exemple suppose qu'il se trouve dans ~/Projects/my-app et crée le nouveau checkout à côté.
cd ~/Projects/my-app
git status --short
git worktree add -b feature/search-ui ../my-app-search-ui
La commande de statut vous permet de vérifier si le checkout actuel contient des modifications en attente avant de changer de contexte. La commande add -b crée une nouvelle branche locale nommée feature/search-ui et l'extrait dans le répertoire voisin my-app-search-ui. Git crée une branche à partir du HEAD actuel si aucun commit de départ n'est spécifié. Choisissez une branche unique et un chemin de destination qui n'est pas déjà utilisé. Git : worktree add
Pour une branche locale existante qui n'est pas extraite dans un autre worktree, utilisez son nom au lieu de -b et d'un nouveau nom de branche :
git worktree add ../my-app-search-ui existing-branch
Si la branche est déjà extraite ailleurs, Git refuse par défaut. Ne forcez pas la commande simplement pour contourner la protection ; utilisez une autre branche ou travaillez dans le checkout qui la possède déjà. Pour créer un worktree pour une branche distante, récupérez d'abord la branche distante si nécessaire et suivez le comportement de branche de suivi de Git ; vérifiez le nom de la branche avant de l'ajouter.
Ouvrir le nouveau checkout dans le Finder et votre éditeur
Dans le Finder, accédez au dossier parent qui contient les deux répertoires de projet, puis ouvrez my-app-search-ui. Vous pouvez utiliser la commande Aller au dossier du Finder (Maj-Commande-G) et saisir le chemin complet, tel que ~/Projects/my-app-search-ui. Gardez le nom du répertoire visible dans le Finder ou votre éditeur afin de pouvoir le distinguer du checkout d'origine.
Apple documente également l'ouverture du Terminal à l'emplacement d'un dossier sélectionné depuis le Finder : affichez la barre de chemin d'accès via Présentation > Afficher la barre de chemin d'accès, faites un Contrôle-clic sur le dossier dans la barre de chemin d'accès, puis choisissez Ouvrir dans le Terminal. Pour ouvrir une autre fenêtre ou un autre onglet de Terminal, utilisez Commande-N ou Commande-T. L'emplacement du dossier sélectionné devient le répertoire de travail pour l'action du Finder. Apple : Ouvrir de nouveaux onglets et fenêtres de Terminal sur Mac
Ouvrez le nouveau dossier en tant que projet distinct dans votre éditeur à l'aide de la commande d'ouverture de dossier documentée de cet éditeur. Le comportement des éditeurs varie ; les worktrees Git ne créent pas automatiquement de fenêtres d'éditeur et ne configurent pas votre environnement de développement. Les dossiers de dépendances, les fichiers ignorés, les fichiers d'environnement local et les services en cours d'exécution peuvent nécessiter une configuration distincte dans chaque checkout.
Vérifier quel checkout vous utilisez
Depuis l'un ou l'autre des répertoires de projet, exécutez :
git worktree list
Git répertorie le worktree principal et les worktrees associés, y compris leurs chemins et les branches extraites. Avant de commiter ou d'exécuter des commandes qui modifient des fichiers, confirmez le dossier actuel ou exécutez git status à cet endroit. Cette simple vérification permet d'éviter l'erreur courante consistant à effectuer des modifications dans le checkout d'origine alors qu'on avait l'intention de travailler dans le nouveau. Git : worktree list
Supprimer un worktree une fois la tâche terminée
Commencez par commiter ou préserver d'une autre manière tout travail dont vous avez besoin. Ensuite, depuis n'importe quel worktree appartenant au dépôt, supprimez le checkout lié par son chemin :
git worktree remove ../my-app-search-ui
git worktree list
Git refuse normalement de supprimer un worktree contenant des fichiers suivis modifiés ou des fichiers non suivis. Examinez et conservez ces fichiers avant la suppression ; --force outrepasse la protection de Git et peut abandonner votre travail. La commande supprime le répertoire du worktree, ne l'utilisez donc pas comme substitut à la vérification de son contenu. Une fois supprimée, la branche reste disponible dans le dépôt, à moins d'être supprimée séparément. Git : worktree remove
Si vous avez supprimé un dossier de worktree manuellement, Git peut conserver son enregistrement administratif. Utilisez git worktree prune pour nettoyer les enregistrements obsolètes ; préférez git worktree remove pour un nettoyage normal. Si vous déplacez un checkout lié dans le Finder, Git risque de perdre la trace de son emplacement ; utilisez git worktree move le cas échéant ou git worktree repair pour le reconnecter. Git : worktree prune, move et repair
Une configuration pratique sur Mac consiste à attribuer un dossier de worktree par tâche active, avec des noms de dossier et de branche courts et identifiables. Conservez le checkout principal pour ses travaux en cours, créez un checkout frère pour une tâche parallèle, et vérifiez le chemin avant toute modification. Cela donne à chaque tâche ses propres fichiers de projet sans avoir à changer constamment de branche dans le checkout d'origine.
Sources
Ouvrir de nouveaux onglets et fenêtres de Terminal sur Mac — Assistance Apple