Git

Git Stash avec nom

Git Stash avec nom

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 --oneline
d79f7aa 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 statut
Sur la branche feature1
Modifications non préparées pour la validation :
(utilisez "git add …" pour mettre à jour ce qui sera engagé)
(utilisez "git checkout -- … " pour annuler les modifications dans le répertoire de travail)
 
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ître
erreur : 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 cachette
Ré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 $ git
stash@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ître
Basculé 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 feature1

Votre 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'applique
 
Sur la branche feature1
Modifications non préparées pour la validation :
(utilisez "git add …" pour mettre à jour ce qui sera engagé)
(utilisez "git checkout -- … " pour annuler les modifications dans le répertoire de travail)
 
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

Je suis sur le point de changer cela en…


À

Je suis sur le point de changer cela en DONE

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 drop
Refs/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 $ git
stash@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@1

Et 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@2

Et la cachette devrait disparaître :

$ git liste de cachette
stash@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

Installez le dernier jeu de stratégie OpenRA sur Ubuntu Linux
OpenRA est un moteur de jeu de stratégie en temps réel libre/gratuit qui recrée les premiers jeux Westwood comme le classique Command & Conquer: Red A...
Installez le dernier émulateur Dolphin pour Gamecube et Wii sur Linux
L'émulateur Dolphin vous permet de jouer aux jeux Gamecube et Wii de votre choix sur des ordinateurs personnels Linux (PC). Étant un émulateur de jeu...
Comment utiliser le moteur de triche GameConqueror sous Linux
L'article couvre un guide sur l'utilisation du moteur de triche GameConqueror sous Linux. De nombreux utilisateurs qui jouent à des jeux sur Windows u...