Comment unstash uniquement certains fichiers?
J'ai caché mes modifications. Maintenant, je veux unstash seulement certains fichiers de la cachette. Comment puis-je faire cela?
- Je pense que vous devez appliquer l'ensemble de la cachette, mais vous pouvez choisir de re-ranger.
- Juste dans votre développement futur, essayez d'éviter d'accrocher les fichiers de commettre l'une d'elles au lieu de cela, parce que git stash n'est pas recommandé
- Quel est le problème avec le coffre?
- Avec "git stash", vous pouvez avoir plusieurs différents cachez des choses, mais ils ne font pas la queue les uns des autres, ils sont juste aléatoire indépendante des correctifs que vous avez planqué parce qu'ils ne sont pas pratiques à un certain point.
- Uhhhh.. git stash est une pièce de théâtre en fonction, et extrêmement utile. Je l'utilise tous les jours. Dire, un collègue a besoin de moi pour examiner quelque chose, mais je suis au milieu d'un complexe de changement. Je ne vais pas commettre un tas de code cassé juste si je peux passer les branches. Je vais ranger, commutateur de branches, d'examiner, de revenir, unstash. Avez-vous des soins pour des précisions sur qui ou pourquoi git stash est soi-disant "non recommandé"? Juste parce que votre git stash histoire est salie et difficile à lire, ne signifie pas que tout le monde elses est. Un malpropre git stash jeu est tout simplement mauvais flux de travail, pas un défaut de Git.
- Rien. Rien n'est mauvais avec git stash. Continuer à l'utiliser.
- J'ai pensé qu'il pourrait être possible de patch a déjà changé dans le fichier de l'aide de
git show stash@{0} -- <filename> | git apply --check
mais il n'arrête pas de direfatal: unrecognized input
- Double Possible de Comment puis-je extraire un seul fichier (ou des modifications à un fichier) à partir d'un git stash?
Vous devez vous connecter pour publier un commentaire.
Comme mentionnés ci-dessous, et détaillée dans "Comment puis-je extraire un seul fichier (ou des modifications à un fichier) à partir d'un git stash?", vous pouvez appliquer l'utilisation
git checkout
ougit show
pour restaurer un fichier spécifique.Qui ne remplacer
filename
: assurez-vous de ne pas avoir des modifications locales, ou vous pouvez fusionner les planqué fichier au lieu.(Comme commenté par Jaime M., pour certains shell comme tcsh où vous avez besoin d'échapper les caractères spéciaux, la syntaxe sera:
git checkout 'stash@{0}' -- <filename>
)yucer suggère dans les commentaires:
Vivek ajoute dans les commentaires:
(comme commenté par peterflynn, vous pourriez avoir besoin
| git apply -p1
dans certains cas, la suppression d'un (p1
) slash traditionnels diff chemins)Comme a commenté: "unstash" (
git stash pop
), puis:git add
)git stash --keep-index
Le dernier point est ce que vous permet de garder un fichier tout en cachant les autres.
Il est illustré dans "Comment ranger un seul fichier de plusieurs fichiers qui ont été modifiés".
git stash pop
en raison de conflits de fichiers. Balamurugan Une réponse a fait le tour pour moi dans ce cas.| git apply
truc (pour fusionner les, rangés de copie avec la copie locale) a échoué avec l'erreur "patch ne s'applique pas." Mais à l'aide de| patch -p1
au lieu de cela, la fusion a parfaitement fonctionné!--
la syntaxe, reportez-vous à stackoverflow.com/a/1192194/6309git checkout 'stash@{0}' -- <file-name>
unstash
signifiepop
, car il me semble qu'il serait probablement dans la plupart des cas, ce que partiellement répond à la question. Comment puis supprimer les appliqués de manière sélective les pièces de la cachette afin d'éviter des conflits ultérieurs et/ou de la confusion quand à éclater les modifications restantes?stash pop --interactive
, bien que techniquement complexe à mettre en œuvre, est beaucoup moins capricieux pour l'utilisateur.stash -u
juste crée un certain soutien s'engage à travailler. Juste curieux de savoir si il existe une solution de prise en charge (ou si c'est sur la timeline) et en soulignant que la solution n'est pas super propre, ou de demander une surcharge importante de la part de l'utilisateur de faire en sorte que les changements de rester là où ils sont censés et de ne pas avoir tout mélangé..$ git checkout stash@{0} --filename ./myFile.java error: unknown option
nom de fichier' `--
" et le nom de fichier (comme il y a dans la réponse ci-dessus). Voir stackoverflow.com/a/1192194/6309 pour en savoir plus sur la "--
" de notation.git show stash@{0}:<full filename> > <newfile>
commande doit être en mesure de créer ce fichier dans l'arbre de travail, même si elle existait que dans le coffre.git checkout stash@{0} -- <filename>
de commande.Par exemple.
Pour restaurer uniquement ./test.c fichier et ./inclure le dossier de la dernière planqué,
-a
drapeau lors de la création de la cachette.Je pense que VonC la réponse est probablement ce que vous voulez, mais voici un moyen de faire un sélectif "git apply":
checkout
quoi que ce soit.git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt
- les backticks sont nécessaires pour le PS de ne pas interpréter les accolades spécialement, et lasc
est nécessaire parce que PS est>
opérateur par défaut est UTF-16 (en fait, UCS-2) qui n'est probablement pas ce que vous voulez. @Balamurugan Une réponse ne souffre pas de ces questions.D'abord la liste de tous les caches
↓
Puis afficher les fichiers qui sont dans le coffre (permet de choisir stash 1):
↓
Appliquer ensuite le fichier que vous voulez:
ou un dossier entier:
Il fonctionne également sans
--
mais il est recommandé de les utiliser. Voir cette post.git stash pop
jeté une erreur pour sans traces de fichiers. je vous remercie.Si vous
git stash pop
(sans conflits), il va supprimer la cachette après qu'il est appliqué. Mais si vousgit stash apply
il va appliquer le patch sans le sortir de la cachette de la liste. Ensuite, vous pouvez annuler les modifications non désirées avecgit checkout -- files...
git stash pop
et il y a des conflits, vous aurez à réparer manuellement et le coffre ne sera PAS supprimé.D'une façon de plus:
Pour les utilisateurs de Windows: accolades ont une signification spéciale dans PowerShell. Vous pouvez entourer de guillemets simples ou de s'enfuir avec backtick. Par exemple:
git checkout 'stash@{0}' YourFile
Sans elle, vous pouvez recevoir un message d'erreur:
Unknown switch 'e'