Question

Dans un précédent Git question, Daniel Benamy parlait d'un flux de travail dans Git:

Je travaillais sur le master et les commis certaines choses et ensuite décidé que je voulais mettre ce travail en attente.J'ai sauvegardé un peu de validations et puis ramifiée d'avant j'ai commencé mon travail de la merde.

Il voulait restaurer à son état de fonctionnement à un point antérieur dans le temps sans perdre ses changements en cours.Toutes les réponses tournaient autour, de diverses manières, quelque chose comme

git branch -m master crap_work
git branch -m previous_master master

Comment cela se compare à git stash?Je suis un peu confus en essayant de voir ce que les différents cas d'utilisation ici quand il semble comme tout git stash n'est déjà géré par la ramification...


@Jordi Bunster:Merci, cela efface les choses.Je crois que je l'avais genre de considérer "accrocher" être comme un poids léger, l'inconnu, de la direction générale.Donc, tout ce que stash pouvez le faire, de la branche peut aussi bien mais avec plus de mots.Nice!

Était-ce utile?

La solution

"stash" prend la uncommitted "sale"des trucs sur votre copie de travail, et les caches de loin, vous laissant avec une nouvelle copie de travail.

Il n'a pas vraiment de direction à tous.Vous pouvez ensuite appliquer le ranger sur le dessus de n'importe quelle autre branche.Ou, comme de Git 1.6, vous pouvez le faire:

git stash branch <branchname> [<stash>]

pour appliquer la cachette sur le haut d'une nouvelle branche, en une seule commande.

Donc, stash fonctionne très bien si vous n'avez pas commis à l' "mal"branche encore.

Si vous avez déjà engagé, ensuite le flux de travail que vous décrivez dans votre question est une meilleure alternative.Et en passant, vous avez raison:Git est très souple, et avec cette flexibilité s'accompagne d'un chevauchement de fonctionnalité.

Autres conseils

Lorsque vous restaurez votre cachette, vos modifications sont réappliquées et vous continuez à travailler sur votre code.

Pour ranger vos modifications en cours

$ git stash save 
Saved "WIP on master: e71813e..."

Vous pouvez aussi avoir plus d'une cachette.La cachette fonctionne comme une pile.Chaque fois que vous enregistrez une nouvelle cachette, il est mis sur le dessus de la pile.

$ git stash list
stash@{0}: WIP on master: e71813e..."

Remarque l' stash@{0} une partie?C'est votre cachette ID.Vous en aurez besoin pour les restaurer plus tard.Nous allons le faire aujourd'hui.La cachette changements d'identité avec chaque cachette que vous faites.stash@{0} se réfère à la dernière cachette que vous avez fait.

Pour appliquer une cachette

$ git stash apply stash@{0}

Vous remarquerez peut-être la cachette est toujours là après que vous avez appliqué.Vous pouvez tomber si vous n'avez pas besoin de plus.

$ git stash drop stash@{0}

Ou, parce que la cachette agit comme une pile, vous pouvez détacher la dernière cachette que vous avez enregistré:

$ git stash pop

Si vous souhaitez effacer tous vos caches loin, exécutez le "clair" de la commande:

$ git stash clear

Il se peut très bien que vous n'utilisez pas de caches que souvent.Si vous voulez juste rapidement ranger les changements pour les restaurer plus tard, vous pouvez le laisser sortir de la cachette de l'ID.

$ git stash
...
$ git stash pop

N'hésitez pas à expérimenter avec le coffre avant de l'utiliser sur certains vraiment un travail important.

J'ai aussi une version plus approfondie de ce posté sur mon blog.

Je suis toujours méfier de git stash.Si vous placez un peu de temps, les choses ont tendance à déraper.git stash liste affiche une liste numérotée des caches que vous avez créé, avec des messages si vous avez fourni...Mais le problème réside dans le fait que vous ne pouvez pas nettoyer les caches, sauf avec une brutale git stash claire (ce qui supprime tous).Donc, sauf si vous êtes toujours anal, en donnant des super-descriptif des messages pour vos caches (un peu va à l'encontre de la planque de la philosophie), vous vous retrouvez avec une incompréhensible tas de caches.

La seule façon que je connaisse pour comprendre qui est qui est de l'utilisation gitk --tous et de repérer les caches.Au moins cela vous permet de voir ce que commettre la cachette a été créé, ainsi que la diff de tout ce qui est inclus dans cette cachette.

Notez que j'utilise git 1.5.4.3, et je pense 1.6 ajoute git stash pop, qui, j'imagine, s'appliquerait sélectionnés cachette et supprimer de la liste.Ce qui semble beaucoup plus propre.

Pour l'instant, j'essaie toujours de branche, sauf si je suis absolument certain que je vais revenir à ranger dans la même journée, même au sein de l'heure.

Si vous recherchez un flux de travail qui peut être plus adaptée que git stash, vous pouvez regarder la git-bouteille.Il est un utilitaire dans le but de sauver et de restaurer les différents git de travail des états comme normal git s'engage, de manière efficace instantanés de l'actuel et pertinent de l'état de votre arbre de travail et tous divers états de fichier indiqué sous git status.

Les principales différences de git stash:

  • git stash enregistre le sale git état de justesse (les fichiers modifiés, et l'ajout de fichiers dans l'index), alors que git-bottle est conçu pour enregistrer tout qui est différent de HEAD, et elle se différencie en préservant chemin entre modifié, modifié et ajouté pas, ne l'ajoute pas, non fusionné les chemins, et la complète rebase/fusionner les etats (seulement les chemins d'accès en vertu de .gitignore ne sont pas enregistrées).
  • git stash enregistre de ranger les objets que vous avez besoin de garder une trace séparément.Si j'ai caché quelque chose il y a 2 semaines je pourrais vous en souvenez pas, alors que git-bottle enregistre en tant que provisoire s'engage à la branche courante.L'action inverse est git-unbottle qui est l'équivalent de la git stash pop.Il est possible de les pousser et de les partager s'engage entre les référentiels.Cela peut être utile pour la télécommande construit, où vous avez un autre dépôt à partir d'un serveur distant juste pour le bâtiment, ou pour collaborer avec d'autres personnes sur la résolution des conflits.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top