Comment Git Stash vos modifications avec le nom associé et le trouver par la suite
Les développeurs doivent souvent effectuer plusieurs tâches. Vous travaillez peut-être sur une nouvelle fonctionnalité et il peut y avoir une demande de correction d'un bogue. Ou vous pourriez être le développeur principal sur plusieurs projets.
Lorsque vous passez d'une tâche à l'autre, vous ne voulez parfois 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 au travail inachevé sans ajouter de commits inutiles à vos référentiels git.
Un workflow pour Git Stash
Initialisons une branche git master et validons un fichier ReadMe.SMS.
$ mkdir mon_projet$ cd mon_projet/
$ git init
$ touchez Lisez-moi.SMS
$ git ajouter -A
$ git commit -m "Initialiser"
Ajoutons maintenant un autre fichier appelé a.txt à la branche master.
$ toucher un.SMS$ git ajouter -A
$ git commit -m "A ajouté un.SMS"
Si vous consultez l'historique, vous verrez :
$ git log --onelined79f7aa Ajout d'un.SMS
9434d7e Initialiser
Créons maintenant une branche feature1 et ajoutons un b.fichier txt :
$ git branch feature1$ git checkout feature1
$ toucher b.SMS
$ git ajouter -A
$ git commit -m "Ajouté b.SMS"
Ouvrez votre b.txt dans un éditeur et mettez dans la ligne :
Je suis sur le point de changer cela en…Et enregistrez le fichier. Si vous vérifiez votre statut git, vous voyez ce qui suit :
$ git statutSur la branche feature1
Modifications non préparées pour la validation :
(utilisez "git add
(utilisez "git checkout --
modifié : b.SMS
aucun changement ajouté au commit (utilisez "git add" et/ou "git commit -a")
Supposons, à ce stade, que vous receviez une demande de mise à jour d'un.txt sur la branche master. Mais vous n'en avez pas fini avec le b.fichier txt. Si vous essayez d'extraire la branche master, vous obtenez l'erreur suivante :
$ git checkout maîtreerreur : vos modifications locales apportées aux fichiers suivants seraient écrasées lors de l'extraction :
b.SMS
Veuillez valider vos modifications ou les ranger avant de pouvoir changer de branche.
Abandon
Mais vous ne voulez pas commettre le travail inachevé dans b.SMS. Vous pouvez utiliser le git stash dans cette situation :
$ git cachetteRépertoire de travail enregistré et état de l'index WIP sur feature1 : 2cfe39b Ajouté b.SMS
HEAD est maintenant à 2cfe39b Ajouté b.SMS
Si vous cochez b.txt, il doit être vide :
$ chat b.SMS$
Si vous vérifiez la cachette, vous verrez :
liste de cache $ gitstash@0 : WIP sur feature1 : 2cfe39b ajouté b.SMS
Si vous essayez de vérifier la branche master, vous devriez pouvoir le faire maintenant :
$ git checkout maîtreBasculé vers la branche 'master'
Supposons que vous apportiez les modifications nécessaires sur le maître, puis que vous reveniez à la branche feature1 :
$ git checkout feature1Votre B.txt est toujours vide :
$ chat b.SMS$
Mais si vous obtenez les modifications de la cachette en utilisant la commande suivante :
$ git stash s'appliqueSur la branche feature1
Modifications non préparées pour la validation :
(utilisez "git add
(utilisez "git checkout --
modifié : b.SMS
aucun changement ajouté au commit (utilisez "git add" et/ou "git commit -a")
La commande stash apply a pris les modifications cachées et les a appliquées à b.fichier txt
Vous pouvez terminer votre travail en b.txt en modifiant la ligne
À
Maintenant, allez-y et validez vos modifications :
$ git ajouter -A$ git commit -m "Modifié b.SMS"
L'application d'une cachette ne la nettoie pas automatiquement de la cachette. Vous devez le nettoyer manuellement :
$ git stash dropRefs/cache abandonnés@0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Pourquoi Git Stash avec nom?
Le git stash est une pile. Ainsi, vous pouvez continuer à empiler vos modifications.
Supposons que vous ajoutez « X » à b.txt, planquez-le, ajoutez un « Y » à b.txt, cachez-le et ajoutez un "Z" à b.txt et rangez-le. Si vous vérifiez l'historique de la cachette, vous verrez quelque chose comme ceci :
$ git liste de cachette[email protected]0 : WIP sur feature1 : 2d6f515 Modified b.SMS
[email protected]1 : WIP sur feature1 : 2d6f515 Modifié b.SMS
[email protected]2 : WIP sur feature1 : 2d6f515 Modified b.SMS
Vous n'avez aucun moyen de savoir quelle cachette a quel changement. Lorsque vous planquez, vous pouvez utiliser l'option de sauvegarde pour mettre des commentaires. Vous pouvez utiliser les commentaires pour associer un nom à votre cache et les rendre reconnaissables :
$ git stash sauvegarde "X"Répertoire de travail et état de l'index enregistrés Sur feature1 : X
HEAD est maintenant à 2d6f515 Modifié b.SMS
Pour ajouter les modifications « X », « Y » et « Z », vous pouvez obtenir les éléments suivants dans votre cachette en utilisant l'option de sauvegarde pour chaque cachette :
liste de cache $ gitstash@0 : Sur feature1 : Z
stash@1 : Sur la fonctionnalité 1 : O
stash@2 : Sur feature1 : 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 la cachette. Supposons que vous vouliez obtenir votre changement « Y ». Vous voyez que [email protected]1 est O. Vous pouvez donc appliquer ce changement à votre branche actuelle :
$ git stash applique stash@1Et votre b.txt devrait avoir les modifications de [email protected]1.
Vous pouvez utiliser la même méthode pour déposer une cachette. Supposons que vous vous rendiez compte que vous n'avez plus besoin de la cachette X. Vous pouvez simplement utiliser la commande suivante pour supprimer cette cache :
$ git stash drop stash@2Et la cachette devrait disparaître :
$ git liste de cachettestash@0 : Sur feature1 : Z
stash@1 : Sur la fonctionnalité 1 : O
N'oubliez pas que si vous utilisez les options d'application et de suppression sans aucun paramètre, il utilisera le haut de la pile ([email protected]0).
Conclusion
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.
Une étude plus approfondie:
- https://git-scm.com/book/en/v1/Git-Tools-Stashing
Les références:
Débordement de pile : comment-nommer-et-récupérer-un-stash-by-name-in-git