Imaginez que vous travaillez sur une fonctionnalité dans un projet logiciel contrôlé par Git. Vous êtes en train d'apporter des modifications lorsque vous recevez une demande de correction d'un bogue critique. Pour commencer à résoudre le problème, vous avez besoin d’une nouvelle branche et d’un répertoire de travail propre. En ce qui concerne les commandes Git de base, vous avez deux options:
git reset --hard
supprimer vos modifications non validées.La première option perd tout votre travail tandis que la dernière entraîne un commit partiel qui n'a pas de sens. Aucun de ces scénarios est tout ce qui est souhaitable.
C'est là que le git stash
la commande entre en jeu. Comme git reset --hard
, il vous donne un répertoire de travail vierge, mais il enregistre également vos modifications incomplètes en interne. Après avoir corrigé le bogue critique, vous pouvez réappliquer ces modifications et reprendre là où vous les avez laissées. Vous pouvez penser à git stash
comme "bouton de pause" pour votre travail en cours.
Ce tutoriel suppose que vous avez installé Git et que vous connaissez son flux de travail de base. Vous devez être à l'aise pour organiser les changements, créer des commits et travailler avec des branches. Vous aurez également besoin d’un référentiel Git pour expérimenter.
Avant de pouvoir courir git stash
, vous devez avoir des modifications non validées dans votre référentiel Git. Par exemple, si vous avez édité un fichier appelé foo.py
, votre statut git
la sortie ressemblerait à ceci:
Sur branche branch Modifications non planifiées pour la validation: (utilisez "git add… "Pour mettre à jour ce qui sera commis) (utilisez" git checkout -- … "Pour ignorer les modifications dans le répertoire de travail) modifié: foo.py
Pour cacher ces modifications, exécutez simplement git stash
sans aucun argument.
git stash
Cela prendra vos modifications programmées et non programmées, enregistrez-les en interne, puis effacez le répertoire de travail. Cela vous donne l’opportunité de changer de branche et de développer d’autres fonctionnalités sans vous soucier de votre commit partiel..
Lorsque vous êtes prêt à revenir à votre travail incomplet, exécutez la commande suivante pour réappliquer les modifications stockées:
Git Stash Pop
Le dernier ensemble de modifications caché réapparaîtra dans votre répertoire de travail et vous pourrez continuer exactement là où vous l'avez laissé. C'est tout ce qu'on peut en dire.
Un peu comme le fusionner
commander, Git Stash Pop
peut entraîner des conflits si les mêmes sections de code source ont été modifiées depuis l'exécution git stash
. Lorsque cela se produit, vous verrez le message suivant après avoir exécuté Git Stash Pop
:
Fusion automatique de foo.py CONFLICT (contenu): Conflit de fusion dans foo.py
Vous trouverez également le fichier affecté répertorié sous le Sentiers sans fusion
section dans le statut git
sortie, ainsi que les lignes affectées dans le fichier source.
<<<<<<< Updated upstream print("Recently committed changes"); ======= print("Incomplete work"); >>>>>>> Changements cachés
Vous devrez résoudre manuellement le conflit dans le fichier source, mais vous ne voulez généralement pas le commettre immédiatement, comme vous le feriez après une fusionner
conflit. La plupart du temps, vous continuerez à travailler sur votre fonctionnalité inachevée jusqu'à ce que vous ayez préparé un commit significatif. Ensuite, vous pouvez simplement l'ajouter à l'index et le valider comme d'habitude. En d'autres termes, vous pouvez traiter Git Stash Pop
conflits tout comme n'importe quels autres changements non engagés.
Pour la plupart des scénarios, les commandes ci-dessus sont tout ce dont vous avez besoin lorsqu'il s'agit d'un "bouton de pause". Mais comprendre comment les changements cachés sont représentés ouvre la porte à une utilisation plus avancée.
Jusqu'ici, nous n'avons parlé que de cacher un seul jeu de modifications. Cependant, chaque fois que vous courez git stash
, les modifications non validées sont stockées sur une pile. Cela signifie que vous pouvez stocker plusieurs changesets simultanément..
Ceci est utile dans les premiers stades de développement lorsque vous ne savez pas quelle direction vous souhaitez prendre. Au lieu de perdre vos modifications avec git reset --hard
, vous pouvez conserver vos instantanés de travail en cours sur la pile de réserve au cas où vous souhaiteriez réappliquer l'un d'entre eux ultérieurement.
Vous pouvez inspecter la pile de stockage avec le liste
paramètre.
liste cachée git
Si vous aviez déjà exécuté git stash
trois fois, cela donnerait quelque chose comme ce qui suit:
stash @ 0: WIP sur la nouvelle fonctionnalité: 5cedccc Essayez quelque chose de fou Stash @ 1: WIP sur la nouvelle fonctionnalité: 9f44b34 Prenez une direction différente stash @ 2: WIP sur la nouvelle fonctionnalité: 5acd291 Commencer la nouvelle fonctionnalité
le Git Stash Pop
commande réapplique toujours l’instantané le plus récent, celui qui se trouve en haut de la pile de stash. Mais, il est également possible de choisir l’instantané stocké que vous voulez réappliquer avec le appliquer
commander. Par exemple, si vous souhaitez réappliquer le deuxième ensemble de modifications, utilisez la commande suivante:
git stash applique stash @ 1
Juste comme Git Stash Pop
, les modifications réapparaîtront dans votre répertoire de travail et vous pourrez continuer à travailler sur la fonctionnalité incomplète. Notez que cela ne supprimera pas automatiquement l'instantané de la pile de stockage. Au lieu de cela, vous devrez le supprimer manuellement avec le bouton laissez tomber
commander.
git stash drop stash @ 1
Encore une fois, travailler avec la pile de stash est plus un cas marginal pour la plupart des utilisateurs de Git. le git stash
et Git Stash Pop
commandes devrait suffire à la plupart de vos besoins, bien que liste cachée git
peut également s'avérer utile si vous avez oublié le lieu de votre dernière opération de collecte.
La création d'instantanés significatifs est au cœur de tout flux de travail Git. Des commits intentionnels et encapsulés facilitent la navigation dans l'historique de votre projet, déterminent où les bogues ont été introduits et annulent les modifications..
Bien que ce ne soit pas exactement une commande quotidienne, git stash
peut être un outil très pratique pour créer des commits significatifs. Il vous permet de stocker des travaux incomplets tout en évitant de devoir enregistrer des instantanés partiels dans l'historique permanent de votre projet. Gardez cela à l'esprit la prochaine fois que vous souhaiteriez pouvoir mettre en pause vos travaux et y revenir plus tard..