Les développeurs doivent souvent effectuer plusieurs tâches. Vous travaillez peut-être sur une nouvelle fonctionnalité et il pourrait y avoir une demande pour corriger un bogue. Ou vous pourriez être le développeur principal sur plusieurs projets.
Lorsque vous basculez entre les tâches, parfois vous ne voulez pas commettre un travail inachevé. Dans ces cas, la commande Git Stash peut être d'une grande aide. Il vous permet d'empiler vos modifications et de revenir plus tard aux travaux inachevés sans ajouter des engins inutiles à vos référentiels Git.
Un flux de travail pour la cachette Git
Initialisons une branche Git Master et engageons un fichier Readme.SMS.
$ mkdir my_project
$ cd my_project /
$ git init
$ tactile readme.SMS
$ git add -a
$ git commit -m "initialiser"
Ajoutons maintenant un autre fichier appelé un.txt à la branche maîtresse.
$ toucher un.SMSSi vous vérifiez l'histoire, vous verrez:
$ Git Log --OnelineMaintenant, créons une branche de fonction1 et ajoutons un B.fichier txt:
$ Git Branch Feature1Ouvrez votre B.Fichier txt dans un éditeur et mettre dans la ligne:
Je suis sur le point de changer cela en…Et enregistrer le fichier. Si vous vérifiez votre statut GIT, vous voyez ce qui suit:
$ statut git
Sur la fonctionnalité de branche1
Modifications non mises en scène pour engager:
(Utilisez "Git Add…" pour mettre à jour ce qui sera engagé)
(Utilisez "Git Checkout - ..." pour éliminer les modifications dans le répertoire de travail)
Modifié: B.SMS
Aucune modification ajoutée à Commit (utilisez "git add" et / ou "git commit -a")
Supposons, à ce stade, vous obtenez une demande pour mettre à jour le A.Fichier txt sur la branche maîtresse. Mais tu n'as pas fini avec le b.fichier txt. Si vous essayez de consulter la branche maître, vous obtenez l'erreur suivante:
$ maître de paiement
Erreur: vos modifications locales des fichiers suivantes seraient écrasées par la caisse:
b.SMS
S'il vous plaît, engagez vos modifications ou les cachez-les avant de pouvoir changer de succursales.
Avorté
Mais vous ne voulez pas commettre le travail inachevé en b.SMS. Vous pouvez utiliser la cachette Git dans cette situation:
$ git cachetteSi vous vérifiez B.txt, il doit être vide:
$ chat b.SMSSi vous vérifiez la cachette, vous verrez:
$ git cachette
Stash @ 0: WIP sur fonction1: 2cfe39b ajouté b.SMS
Si vous essayez de consulter la branche maître, vous devriez pouvoir le faire maintenant:
$ maître de paiement
Changé de succursale «maître»
Supposons que vous effectuiez les modifications nécessaires sur le maître, puis revenez à la branche de fonctionnalité: Branche:
$ git cockout feature1
Votre B.txt est toujours vide:
$ chat b.SMSMais si vous obtenez les modifications de la cachette en utilisant la commande suivante:
$ git stash appliquer
Sur la fonctionnalité de branche1
Modifications non mises en scène pour engager:
(Utilisez "Git Add…" pour mettre à jour ce qui sera engagé)
(Utilisez "Git Checkout - ..." pour éliminer les modifications dans le répertoire de travail)
Modifié: B.SMS
Aucune modification ajoutée à Commit (utilisez "git add" et / ou "git commit -a")
La commande Stash Apply a pris les modifications cachées et l'a appliquée à B.fichier txt
Vous pouvez terminer votre travail en b.txt mon modification de la ligne
Pour
Allez maintenant et commettez vos modifications:
$ git add -aL'application d'une cachette ne le nettoie pas automatiquement à partir de la cachette. Vous devez le nettoyer manuellement:
$ git cachette
Réfs / cachettes supprimées @ 0 (0A66A16B32633E8D564D08E38254C491C1B1D3BE)
Pourquoi Git Stash avec le nom?
La cachette git est une pile. Afin que vous puissiez continuer à empiler vos modifications.
Supposons que vous ajoutiez «x» à b.txt, cachez-le, ajoutez un «y» à b.txt, racheter et ajouter un «z» à b.txt et cachez-le. Si vous vérifiez l'histoire de la cachette, vous verrez quelque chose comme ceci:
$ git cachetteVous n'avez aucun moyen de savoir quelle réserve a qui change. Lorsque vous cachez, vous pouvez utiliser l'option de sauvegarde pour faire des commentaires. Vous pouvez utiliser les commentaires pour attacher un nom à votre cachette et les rendre reconnaissables:
$ git stash Économisez "x"
Répertoire de travail enregistré et état d'index sur fonction1: x
La tête est maintenant à 2d6f515 modifié B.SMS
Pour ajouter la modification «X», «Y» et «Z», vous pouvez obtenir ce qui suit dans votre cachette en utilisant l'option de sauvegarde pour chaque cachette:
$ git cachette
Stash @ 0: sur fonction1: z
Stash @ 1: sur fonction1: y
Stash @ 2: sur fonction1: x
Maintenant, vous avez un nom pour chaque changement que vous avez caché. Malheureusement, vous ne pouvez pas utiliser le nom pour récupérer la cachette. Vous devrez utiliser le numéro de cachette. Supposons que vous vouliez obtenir votre changement «y». Vous voyez cette cachette @ 1 est y. Ainsi, vous pouvez appliquer ce changement à votre branche actuelle:
$ git Stash Appliquer Stash @ 1
Et votre B.txt devrait avoir les modifications de Stash @ 1.
Vous pouvez utiliser la même méthode pour laisser tomber une cachette. Supposons que vous réalisez que vous n'avez plus besoin de la cachette X. Vous pouvez simplement utiliser la commande suivante pour supprimer cette réserve:
$ git stash drop sash @ 2
Et la cachette devrait disparaître:
$ git cachette
Stash @ 0: sur fonction1: z
Stash @ 1: sur fonction1: y
N'oubliez pas que si vous utilisez les options d'application et d'abandon sans aucun paramètre, il utilisera le haut de la pile (Stash @ 0).
La commande Git Stash est un moyen puissant de gérer votre espace de travail. La maîtrise de cette commande vous aidera à travailler plus efficacement.
Stack Overflow: Exploiter le nom et le retraité