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