web-dev-qa-db-fra.com

git supprimer un fichier de la cachette

J'ai une cachette avec un tas de fichiers dedans.

Mais je ne peux pas appliquer mon stash à cause d'un fichier en conflit. J'ai identifié le fichier problématique dans ma cachette et je souhaite le supprimer.

Comment puis-je supprimer un seul fichier d'une cachette sans détruire le tout?

30
Houseman

Un stash est un commit (ou vraiment, deux ou même parfois trois commits) et vous ne pouvez pas modifier un commit. La réponse littérale à votre question est donc "vous ne pouvez pas". Heureusement, vous n'avez pas besoin pour.

Vous dites que vous ne pouvez pas appliquer votre stash à cause d'un fichier en conflit. Mais vous pouvez l'appliquez, vous obtenez juste un conflit de fusion. Tout ce que vous devez faire est de résoudre le conflit de fusion.

Disons que le conflit est dans le fichier README.txt, juste pour qu'il y ait quelque chose à écrire ici.

Si vous souhaitez le résoudre en conservant la version en succursale, appliquez le stash, puis consultez la version en succursale pour résoudre le conflit:

git stash apply
git checkout --ours -- README.txt  # or git checkout HEAD -- README.txt

Si vous souhaitez conserver la version intégrée, extrayez-la:

git checkout --theirs -- README.txt # or git checkout stash -- README.txt

Ou, utilisez n'importe quel ancien outil de résolution de fusion (j'utilise simplement un éditeur de texte), puis "git add" le résultat.

Une fois que vous avez terminé avec la cachette, git stash drop "oubliera" les commits qui composent la cachette. (Ne le faites pas tant que vous n'êtes pas sûr d'en avoir fini; il est très difficile de le récupérer par la suite.)

24
torek

Il existe une solution de contournement à cette situation:

  1. enregistrez votre stash sous forme de fichier patch:

    $ git stash show -p > stash.patch
    
  2. appliquez ce correctif, en évitant les conflits (il vous sera demandé de résoudre les conflits, il suffit de sauter les fichiers manquants):

    $ patch -p1 < stash.patch
    

N'oubliez pas de nettoyer stash.patch ensuite!

12
Dmytro Sirenko
  1. Stockez vos modifications non validées.
  2. Appliquez votre cachette d'origine
  3. Jeter le fichier
  4. 4 Appliquez la réserve contenant vos modifications non validées.
2
Francisco Aguilera

supprimez le fichier requis de votre base de code locale, puis poussez-le pour le cacher. Les modifications seront reflétées et vos fichiers seront supprimés de la cachette.

0
viper03