890 votes

Comment serait extraire un seul fichier (ou modifications dans un fichier) d’une cachette de git ?

Je voudrais savoir si il est possible d’extraire un seul fichier ou diff d’un fichier depuis une cachette de git sans éclater l’ensemble de modifications de cachette au large.

N’importe qui serait en mesure de fournir des suggestions/idées à ce sujet ?

1279voto

Jakub Narębski Points 87537

Dans git stash page de manuel, vous pouvez lire que (dans la section "Discussion", juste après les "Options" de la description):

Une cachette est représenté comme un commit dont l'arborescence des dossiers de l'état de l' répertoire de travail, et son premier parent est le commettre à la TÊTE lors de la cachette a été créé.

Vous pouvez donc traiter stash (par exemple, stash@{0} est le premier / premier cachette) comme une fusion s'engager, et l'utilisation:

$ git diff stash@{0}^1 stash@{0} -- <filename>

Explication: stash@{0}^1 raccourci signifie premier parent de la cachette, qui, comme indiqué dans l'explication ci-dessus est s'engager à laquelle des modifications ont été caché loin. Nous utilisons cette forme de "git diff" (avec deux commits), car stash@{0} / refs/stash est une fusion de commettre, et nous devons dire à git qui parent nous voulons diff contre. Plus cryptique:

$ git diff stash@{0}^! -- <filename>

il devrait également travailler (voir git rev-parse page de manuel pour une explication de la rev^! de la syntaxe, dans "Spécification des plages" de la section).

De même, vous pouvez utiliser git checkout pour vérifier un fichier unique de la cachette:

$ git checkout stash@{0} -- <filename>

ou l'enregistrer sous un autre nom de fichier:

$ git show stash@{0}:<full filename>  >  <newfile>

(notez qu'ici <nom de fichier> est le chemin d'accès complet d'un fichier par rapport au sommet de répertoire d'un projet (pense: par rapport à l' stash@{0})).

53voto

Tim Henigan Points 19948

Si vous utilisez plutôt que , il va appliquer la planque à votre arborescence de travail mais tout en conservant la planque.

Ceci fait, vous pouvez / le fichier que vous voulez et puis réinitialisez le reste change.

11voto

Nathan Kitchen Points 2729

Vous pouvez obtenir la diff pour une cachette avec " `` " (ou quel que soit le nombre de la planque ; voir « git stash liste »). Il est facile d’extraire de la section de la diff pour un seul fichier.

5voto

Philluminati Points 1006

Le concept le plus simple à comprendre, bien que peut-être pas le meilleur, c'est que vous avez trois fichiers modifiés et que vous souhaitez ranger un fichier.

Si vous n' git stash pour les ranger tous, en git stash apply pour les ramener à nouveau, puis git checkout f.c sur le fichier en question effectivement de le réinitialiser.

Lorsque vous souhaitez unstash que l'exécution du fichier de faire un git reset --hard , puis exécutez git stash apply de nouveau, profitant du fait qu' git stash apply n'est pas évident de le diff de la cachette de la pile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X