web-dev-qa-db-fra.com

Comment décompresser seulement certains fichiers?

Je cache mes changements. Maintenant, je veux cacher seulement certains fichiers de la réserve. Comment puis-je faire ceci?

332
morpheus

Comme mentionné ci-dessous , et détaillé dans " Comment puis-je extraire un seul fichier (ou les modifications d’un fichier) à partir d’une cachette Git? ", vous pouvez appliquer l’utilisation git checkout ou git show pour restaurer un fichier spécifique.

_git checkout stash@{0} -- <filename>
_

Cela écrase filename: assurez-vous de ne pas avoir de modifications locales, ou vous voudrez peut-être fusionner le fichier stashed file) à la place .

(Comme commenté par Jaime M. , pour certains Shell comme tcsh où vous devez échapper les caractères spéciaux, la syntaxe serait la suivante: _git checkout 'stash@{0}' -- <filename>_)

ou pour le sauvegarder sous un autre nom de fichier:

_git show stash@{0}:<full filename>  >  <newfile>
_

(notez qu'ici _<full filename>_ est le chemin complet d'un fichier par rapport au répertoire principal d'un projet (pensez: par rapport à _stash@{0}_)).

yucer suggère dans les commentaires :

Si vous souhaitez sélectionner manuellement les modifications que vous souhaitez appliquer à partir de ce fichier:

_git difftool stash@{0}..HEAD -- <filename>
_

Vivek ajoute dans les commentaires :

On dirait que "_git checkout stash@{0} -- <filename>_" restaure la version du fichier à partir du moment où le stash a été effectué - il ne fait que NOT applique (uniquement) les modifications stockées pour ce fichier.
Pour faire ce dernier:

_git diff stash@{0}^1 stash@{0} -- <filename> | git apply
_

(comme commenté par peterflynn , vous aurez peut-être besoin de _| git apply -p1_ dans certains cas, en supprimant un (_p1_) barre oblique des chemins diff traditionnels)


Comme commenté: "unstash" (_git stash pop_), puis:

  • ajoutez ce que vous voulez conserver à l'index (_git add_)
  • rangez le reste: _git stash --keep-index_

Le dernier point concerne ce qui vous permet de conserver un fichier tout en en conservant d’autres.
Il est illustré dans " Comment ne cacher qu'un seul fichier parmi plusieurs fichiers ayant été modifiés ".

390
VonC
git checkout stash@{N} <File(s)/Folder(s) path> 

Par exemple. Pour restaurer uniquement le fichier ./test.c et le dossier ./include à partir du dernier fichier caché,

git checkout stash@{0} ./test.c ./include
113
Balamurugan A

Je pense que la réponse de VonC correspond probablement à ce que vous voulez, mais voici une façon de faire une "application géniale" sélective:

git show stash@{0}:MyFile.txt > MyFile.txt
35
Mike Monkiewicz

Première liste de toutes les cachettes

git stash list

stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'

Puis montrez quels fichiers se trouvent dans la réserve (prenons la réserve 1):

git stash show 1 --name-only

//Hint: you can also write
//git stash show stash@{1} --name-only

 ajax/product.php
 ajax/productPrice.php
 errors/Company/js/offlineMain.phtml
 errors/Company/mage.php
 errors/Company/page.phtml
 js/konfigurator/konfigurator.js

Ensuite, appliquez le fichier que vous souhaitez:

git checkout stash@{1} -- <filename>

ou dossier entier:

git checkout stash@{1} /errors

Cela fonctionne aussi sans -- mais il est recommandé de les utiliser. Voir this post.

Il est également classique de reconnaître un double trait d'union comme un signal permettant d'arrêter l'interprétation des options et de traiter tous les arguments suivants à la lettre.

14
Black

Si vous git stash pop (sans conflit), il supprimera le stash après son application. Mais si vous git stash apply, il appliquera le correctif sans le supprimer de la liste de dissimulation. Ensuite, vous pouvez annuler les modifications indésirables avec git checkout -- files...

10
Ben Jackson

Une autre façon:

git diff stash@{N}^! -- path/to/file1 path/to/file2  | git apply -R
3
Lacho Tomov

Pour les utilisateurs de Windows: les accolades ont une signification particulière dans PowerShell. Vous pouvez entourer avec des guillemets simples ou échapper avec backtick. Par exemple:

git checkout 'stash@{0}' YourFile

Sans cela, vous pourriez recevoir une erreur:

Unknown switch 'e'

3
Janac Meena