Tel que mentionné ci-dessous, et détaillé dans "Comment extraire un fichier unique (ou des modifications à un fichier) d'une stash git?", vous pouvez utiliser git checkout
ou git show
pour restaurer un fichier spécifique.
git checkout stash@{0} --
Avec Git 2.23+ (août 2019), utilisez git restore
, qui remplace la commande git checkout
confuse:
git restore --source=stash@{0} --
Cela écrase filename
: assurez-vous de ne pas avoir de modifications locales, ou vous voudrez peut-être fusionner le fichier caché au lieu.
(Comme commenté par Jaime M., pour certains shells comme tcsh où vous devez échapper les caractères spéciaux, la syntaxe serait: git checkout 'stash@{0}' --
)
ou pour le sauvegarder sous un autre nom de fichier:
git show stash@{0}: >
(notez qu'ici est le chemin complet d'un fichier relatif au répertoire racine d'un projet (pensez: relatif à stash@{0}
)).
yucer suggère dans les commentaires:
Si vous souhaitez sélectionner manuellement les changements que vous souhaitez appliquer à partir de ce fichier:
git difftool stash@{0}..HEAD --
# ou
git checkout -p stash@{0} --
Vivek ajoute dans les commentaires:
On dirait que "git checkout stash@{0} --
" restaure la version du fichier telle qu'elle était au moment de la réalisation de la stash - il n'applique PAS (juste) les changements cachés pour ce fichier.
Pour faire cela:
git diff stash@{0}^1 stash@{0} -- | git apply
(comme commenté par peterflynn, vous pourriez avoir besoin de | git apply -p1
dans certains cas, en enlevant un slash initial (p1
) des chemins de diff traditionnels)
Comme commenté: "unstash" (git stash pop
), puis:
- ajoutez ce que vous voulez conserver à l'index (
git add
)
- mettez le reste en cachette:
git stash --keep-index
Le dernier point est ce qui vous permet de conserver certains fichiers tout en mettant d'autres en cache.
C'est illustré dans "Comment cacher uniquement un fichier parmi plusieurs fichiers modifiés".
4 votes
Je pense que vous devez appliquer l'ensemble du stash, mais ensuite vous pouvez re-stash sélectivement.
0 votes
Dans vos futurs développements, essayez d'éviter de mettre en réserve les fichiers, commitez-les plutôt, car git stash n'est pas recommandé.
5 votes
@AbdouTahiri Qu'y a-t-il de mal avec la cache?
0 votes
@alex Avec "git stash", vous pouvez également avoir plusieurs éléments mis en réserve différents, mais ils ne s'enchaînent pas les uns aux autres - ce ne sont que des correctifs indépendants et aléatoires que vous avez mis en réserve parce qu'ils étaient gênants à un moment donné.
49 votes
@AbdouTahiri Uhhhh.. git stash est une fonctionnalité légitime et extrêmement utile. Je l'utilise quotidiennement. Disons, un collègue a besoin que je révise quelque chose mais je suis en train de travailler sur un ensemble de changements complexes. Je ne vais pas commettre un tas de code cassé juste pour pouvoir changer de branches. Je vais mettre de côté, changer de branches, réviser, changer en arrière, dépiler. Avez-vous envie d'élaborer sur qui ou pourquoi git stash est supposément "sé non recommandé"? Juste parce que ton historique git stash est embrouillé et difficile à lire ne signifie pas que celui des autres l'est. Un ensemble de git stash désordonné est juste une mauvaise pratique de workflow, pas une faille de Git.
8 votes
@alex Rien. Rien ne va avec git stash. Continuez à l'utiliser.
0 votes
Je pensais qu'il pourrait être possible de patcher un fichier déjà modifié en utilisant
git show stash@{0} -- | git apply --check
mais cela ne cesse de direfatal: entrée non reconnue
4 votes
Possible duplicate de Comment extraire un seul fichier (ou des modifications d'un fichier) d'une cache Git ?
0 votes
Utilisez simplement ceci =
git checkout stash@{0} --