Si je travaille sur la branche A et que je dois soudainement travailler sur la branche B avant d'être prêt avec un commit sur la branche A, je cache mes modifications sur A, checkout B, fais mon travail là-bas, puis checkout A et applique le stash.
Si je travaille sur A et que je veux arrêter de travailler pour la journée, dois-je mettre mon travail en cache et l'appliquer le lendemain (lorsque je reprendrai mon travail), ou devrais-je simplement laisser les choses telles quelles, fichiers modifiés non validés dans le directeur de travail? Je ne vois pas pourquoi j'aurais besoin d'utiliser stash dans ce cas, sauf s'il y a un avantage de sécurité.
Aussi, un autre scénario: je travaille à la fois au travail et à la maison. Si je ne suis pas prêt avec un commit lorsque je veux rentrer chez moi, puis-je cacher mon travail, le pousser sur GitHub, puis récupérer ce stock chez moi?
Réponses:
Stash n'est qu'une méthode pratique. Comme les branches sont si bon marché et faciles à gérer dans git, personnellement, je préfère presque toujours créer une nouvelle branche temporaire plutôt que de la cacher, mais c'est surtout une question de goût.
Le seul endroit où j'aime cacher est si je découvre que j'ai oublié quelque chose dans mon dernier commit et que j'ai déjà commencé à travailler sur le suivant dans la même branche:
la source
git stash pop
deux fois, vous perdrez la distinction entre ces deux ensembles de modifications.git stash push
. La raison principale en est quegit stash push
introduit l'option de cacher les pathspecs sélectionnés , quelque chosegit stash save
ne prend pas en charge.Je vais casser la réponse sur trois paragraphes.
Partie 1:
git stash
(Pour enregistrer vos modifications non validées dans un "stash". Remarque: cela supprime les modifications de l'arborescence de travail!)git checkout some_branch
(changement vers la succursale prévue - dans ce cassome_branch
)git stash list
(liste des cachettes)git stash apply
(pour appliquer le stash à l'arbre de travail dans la branche actuelle)git stash apply stash@{12}
(si vous avez beaucoup de stash, vous pouvez choisir quel stash s'appliquera - dans ce cas, nous appliquons le stash12
)git stash drop stash@{0}
(pour supprimer de la liste des réserves - dans ce cas, des réserves0
)git stash pop stash@{1}
(pour appliquer la réserve sélectionnée et la supprimer de la liste des réserves)Partie 2:
Vous pouvez masquer vos modifications avec cette commande mais ce n'est pas nécessaire.
Vous pouvez continuer le lendemain sans cachette.
Ceci commande pour cacher vos changements et travailler sur différentes branches ou pour implémenter une certaine réalisation de votre code et enregistrer dans des stashes sans branches et commitsor votre cas personnalisé!
Et plus tard, vous pouvez utiliser certains des stashes et vérifier ce qui est le mieux.
Partie 3:
Commande Stash pour masquer localement vos modifications.
Si vous voulez travailler à distance, vous devez vous engager et pousser.
la source
L'idée principale est
La commande Basicallly Stash conserve donc vos modifications dont vous n'avez pas besoin ou que vous ne voulez pas pour le moment; mais vous pouvez en avoir besoin.
la source
Vous pouvez utiliser les commandes suivantes:
Pour enregistrer vos modifications non validées
git stash
Pour répertorier vos cachettes enregistrées
git stash list
Pour appliquer / récupérer les modifications non validées où x vaut 0,1,2 ...
git stash apply stash@{x}
Pour appliquer une réserve et la supprimer de la liste des réserves
git stash pop stash@{x}
Pour appliquer une réserve et la conserver dans la liste des réserves
git stash apply stash@{x}
la source
Si vous appuyez sur
git stash
lorsque vous avez des modifications dans la copie de travail (pas dans la zone de préparation), git créera un objet caché et poussera sur la pile de cachettes (comme vous l'avez faitgit checkout -- .
mais vous ne perdrez pas les modifications). Plus tard, vous pouvez sortir du haut de la pile.la source
La commande stash cachera toutes les modifications que vous avez apportées depuis votre dernier commit. Dans votre cas, il n'y a aucune raison de vous cacher si vous voulez continuer à travailler dessus le lendemain. Je n'utiliserais stash que pour annuler les modifications que vous ne souhaitez pas valider.
la source
git stash
ne changera pas votre succursale. Il ne "rétablira" en particulier aucune modification validée. Il supprimera uniquement (temporairement) toutes les modifications non validées sur vos fichiers. - Cela peut sembler difficile, mais ce genre de mots a une signification très particulière dans le contexte de git. Vous ne devriez vraiment pas les mélanger.git stash
ne touchera aucun commit et ne modifiera donc aucune branche du tout. Il ne «supprimera» rien d'une branche et ne le «réinitialisera» d'aucune façon. La branche reste la même, seuls les fichiers de l'arborescence de travail changent. - Ce sont deux choses totalement différentes.Je sais que StackOverflow n'est pas l'endroit idéal pour les réponses basées sur les opinions, mais j'ai en fait une bonne opinion sur le moment où mettre les changements dans une réserve.
Vous ne voulez pas vous engager de modifications expérimentales
Lorsque vous apportez des modifications à votre espace de travail / arborescence de travail, si vous devez effectuer des opérations basées sur des branches telles qu'une fusion, une transmission, une extraction ou une extraction, vous devez être à un point de validation propre. Donc, si vous avez des modifications d'espace de travail, vous devez les valider. Mais que faire si vous ne voulez pas les engager? Et s'ils sont expérimentaux? Quelque chose que vous ne voulez pas faire partie de votre historique de commit? Quelque chose que vous ne voulez pas que les autres voient lorsque vous poussez vers GitHub?
Vous ne voulez pas perdre les modifications locales avec une réinitialisation matérielle
Dans ce cas, vous pouvez effectuer une réinitialisation matérielle. Mais si vous effectuez une réinitialisation matérielle, vous perdrez toutes les modifications de votre arbre de travail local car tout est écrasé à l'endroit où il se trouvait au moment du dernier commit et vous perdrez toutes vos modifications.
Donc, en ce qui concerne la réponse `` quand devriez-vous cacher '', la réponse est lorsque vous devez revenir à un point de validation propre avec un arbre de travail / index / commit synchronisé, mais vous ne voulez pas perdre vos modifications locales dans le processus. Mettez simplement vos modifications dans une réserve et vous êtes bon.
Et une fois que vous avez fait votre réserve, puis fusionné, tiré ou poussé, vous pouvez simplement cacher pop ou postuler et vous êtes de retour à votre point de départ.
Git stash et GitHub
GitHub ajoute constamment de nouvelles fonctionnalités, mais à partir de maintenant, il existe maintenant un moyen d'y enregistrer une réserve. Encore une fois, l'idée d'une réserve est qu'elle est locale et privée. Personne d'autre ne peut jeter un œil dans votre réserve sans un accès physique à votre poste de travail. Un peu de la même manière que git reflog est privé avec le git log est public. Ce ne serait probablement pas privé s'il était poussé vers GitHub.
Une astuce pourrait être de faire un diff de votre espace de travail, de vérifier le diff dans votre référentiel git, de le valider puis de le pousser. Ensuite, vous pouvez faire un pull de chez vous, obtenir le diff et le dérouler. Mais c'est une manière assez désordonnée d'atteindre ces résultats.
la source