Pour récupérer un seul fichier depuis un stash sur macOS, utilisez git restore avec le stash comme source et le chemin du fichier comme cible. Cela restaure ce fichier dans votre copie de travail tout en laissant l'entrée du stash disponible. Identifiez d'abord le bon stash et inspectez ses modifications ; puis restaurez le chemin spécifique et examinez le résultat.

1. Ouvrez Terminal dans le dépôt

Ouvrez Terminal depuis Spotlight ou le dossier Applications/Utilitaires du Finder, puis placez-vous dans le répertoire du dépôt à l'aide de cd. Par exemple, tapez cd , faites glisser le dossier du projet dans la fenêtre de Terminal pour insérer son chemin, puis appuyez sur Retour. Apple documente Terminal comme étant l'interface en ligne de commande de macOS ; zsh est son shell par défaut, bien qu'un administrateur ou un utilisateur puisse configurer un autre shell. Ouvrir ou quitter Terminal sur Mac

Vérifiez que vous êtes bien dans le dépôt souhaité et visualisez les modifications locales avant de restaurer quoi que ce soit :

git status --short

Restaurer depuis un stash peut remplacer le contenu actuel du fichier cible dans votre copie de travail ; enregistrez ou commitez donc toutes les modifications apportées à ce fichier que vous souhaitez conserver. Cette opération est sélective par chemin, mais il ne s'agit pas d'une fusion ni d'une sauvegarde de sécurité.

2. Trouvez et inspectez le stash

Listez les entrées disponibles :

git stash list

Git nomme l'entrée la plus récente stash@{0}, la suivante stash@{1}, et ainsi de suite. Choisissez l'entrée contenant la version désirée. Si les descriptions ne sont pas claires, inspectez une entrée candidate sous forme de patch :

git stash show --patch 'stash@{0}'

Remplacez stash@{0} par l'entrée que vous avez identifiée. Mettre la référence entre guillemets est utile dans zsh car les accolades ont une signification syntaxique dans le shell. Git documente stash show pour inspecter un stash et stash apply pour appliquer une entrée entière ; la commande ci-dessous sélectionne plutôt un chemin unique à partir de l'instantané du stash. Documentation git-stash

3. Restaurez uniquement le fichier

Exécutez git restore avec la référence du stash comme source et le chemin relatif au dépôt après -- :

git restore --source='stash@{0}' -- 'src/config.json'

Remplacez src/config.json par le chemin exact dont vous avez besoin, en utilisant des barres obliques et en l'écrivant de manière relative à la racine du dépôt. Les guillemets empêchent également l'interprétation des espaces et des caractères génériques par le shell. L'option --source sélectionne un commit ou un arbre comme source du contenu ; le pathspec limite le chemin que Git restaure. Comme --staged est omis, Git restaure la copie de travail et ne touche pas à l'index. Documentation git-restore

Examinez maintenant la modification :

git status --short
git diff -- 'src/config.json'

La version restaurée est, dans le cas habituel, une modification non indexée (unstaged) de la copie de travail par rapport à l'index. Si le fichier était indexé auparavant, comparez attentivement les versions de la copie de travail et de l'index avant de l'indexer ou de le commiter. Le stash reste présent dans la liste des stashs car git restore y lit les données sans appliquer ni supprimer l'entrée complète.

Quand ce flux de travail nécessite des ajustements

Le chemin doit exister dans l'instantané de la copie de travail du stash. Si ce n'est pas le cas, Git peut indiquer que le pathspec ne correspond à rien ; vérifiez le patch et le nom du fichier, y compris les majuscules/minuscules. Un chemin suivi qui est absent de l'arbre source peut être supprimé pour faire correspondre la cible à cet arbre, soyez donc particulièrement prudent si le stash enregistre une suppression. La documentation de restore de Git décrit ce comportement. Documentation git-restore

Cette méthode est destinée à un fichier présent dans l'instantané de la copie de travail suivie du stash. Les stashs créés avec -u ou -a peuvent également contenir des fichiers non suivis ou ignorés, stockés séparément ; git restore --source='stash@{0}' ne traite pas cet instantané séparé comme s'il s'agissait de l'arbre principal du stash. Inspectez attentivement ces entrées et utilisez les commandes d'inspection et de récupération de stash documentées par Git plutôt que de supposer que cette commande les récupérera. Documentation git-stash

Si l'objectif est d'appliquer des lignes spécifiques plutôt que le fichier entier, git restore -p propose une sélection interactive par section (hunk), mais confirmez le comportement et la source pour votre version installée de Git avant de vous y fier. Pour restaurer à la fois la version indexée et celle de la copie de travail d'un fichier, git restore prend en charge à la fois --staged et --worktree ; cela modifie également l'index, utilisez-le donc uniquement lorsque c'est intentionnel. Documentation git-restore

La séquence pratique est la suivante : identifiez le stash, confirmez la présence du fichier dans son contenu, restaurez un chemin relatif au dépôt depuis le stash choisi et inspectez le diff avant de continuer. Cela permet de garder le stash intact et de limiter l'opération de restauration au chemin que vous avez spécifié.

Sources