Utilisez git stash save ou git commit pour les changements locaux?
J'ai modifié quelques fichiers dans mon repo, mais ne veulent pas être poussé public ou de créer de toute temporaire, de la branche pour les stocker. Je veux juste enregistrer ces modifications dans quelque part. Si la commande est mieux:
git stash save "save message"
ou
git commit -am "save message"
?
Si j'utilise git commit
est-il vrai que toutes mes modifications locales, sera poussé publiquement par un git push
commande? Que faire si je veux juste faire la promotion de commettre parmi eux?
source d'informationauteur Balthier
Vous devez vous connecter pour publier un commentaire.
Lors de la poussée, vous pouvez toujours faire la promotion de commit (généralement de les commettre, à l'extrémité de votre extrait de branche). Cependant, comme la validation de hachage partie se compose de la commet des bases sur (son parent s'engage), vous ont pousser tout parent s'engage également. Et en poussant le parent s'engage à vous devez également pousser leur parent s'engage et ainsi de suite. Donc, vous ne pouvez pousser l'ensemble de l'histoire spécifique de commettre.
Si vous créez un commit juste pour stocker quelque chose, mais pas pour pousser, vous devez vous assurer que vous n'appuyez jamais sur qui s'engagent, ni s'engage que sur la base de cette validation. Pour ce faire, après vous avez fait votre travail, qui fonde sur l'embauche de s'engager, vous avez besoin de squash temporaire s'engager dans le nouveau commit que vous créez pour la pousser.
En d'autres termes, oui, il est possible d'utiliser une validation temporaire, le stockage privé. Cependant, il est beaucoup plus facile à utiliser la cachette de la fonctionnalité. En fait, la fonctionnalité est fait pour ce cas d'utilisation.
Personnellement, je préfère juste aller droit privé (local) des branches, mais vous permet de ranger votre travail. Être conscient de deux choses à propos de caches:
refs/tags/tag-foo
; une branche est de la formerefs/tags/branch-foo
; et la seule marqué cachette commettre est marquérefs/stash
. Bien sûr, de la direction générale des étiquettes ont également la "déplace automatiquement à mesure que vous ajoutez s'engage", mais si vous n'ajoutez jamais plus s'engage là-bas, ils ne déplacez jamais, de sorte qu'ils fonctionnent tout aussi bien pour enregistrer un seul commit.)refs/stash
ne le faites pas, mais vous pouvez changer cela avec la configuration des entrées—donc empilés stash s'engage peut aussi "expirer" (en même temps, le reflog entrée expire). (Plus précisément, ils devenir "collector", mais cette distinction n'est pas utile si ils sont partis. 🙂 )L'intention des caches est de sauver quelque chose à court terme. Si vous avez jamais revenir à une pension de la fin et de trouver un tas de caches, toutes le nom "WIP sur la branche", il n'est pas amusant d'essayer de les comprendre.
Les autres caractéristiques/bugs 🙂
stash
fournir sont:git stash branch
vous permet de changer votre état d'esprit après le fait et tourner une cachette dans une branche. Ainsi, si "court terme" s'avère être un problème (vous vous apprêtiez à le corriger cet après-midi, mais maintenant, il a été poussé hors tension pendant au moins un mois) il vous suffit de tourner la cachette dans une branche, après tout.git stash apply [--index]
fera de son mieux pour "re-faire" appliquer changements de la branche courante. Avec--index
il va essayer de restaurer à la fois la mise en scène et unstaged changements de façon indépendante. (Il y a des cas où cela est impossible, cependant).git stash pop
automatiquement les rejets de la cachette de référence pour vous. Malheureusement, il ne ce même si vous utilisezgit stash pop --index
et à gauche de la--index
partie. Il est facile de perdre une partie de votre état (mise en scène vs unstaged) si vous utilisezpop
. Si vous utilisezapply
et plus tarddrop
une fois que vous êtes sûr que vous avez tout de la même manière que vous le souhaitez, vous pouvez éviter ce problème.Noter que
git stash branch
implique--index
: la branche nouvellement créée aura mis en scène-et-unstaged changements restauré à la façon dont ils ont été quand vous avez lagit stash
. (La branche va se ramifient à partir de la validation que vous étiez lorsque vous avez fait legit stash
aussi.) Valider les modifications (git add
-ing plus si vous le souhaitez, ou que les deux s'engage, ou quoi que ce soit) et procéder comme si vous aviez fait une private branch en premier lieu.1expire-mesure de la partie de la pile se compose de tous les caches autres que
stash@{0}
dansgit stash list
de sortie.Je vous suggérons d'utiliser cachant outil pour cela. C'est pourquoi il est ici. Vous pouvez ranger votre chnges et, plus tard, de les ajouter à votre code. Il y a beaucoup plus de fonctionnalités que vous pouvez utiliser avec la commande git stash. Voici le lien http://git-scm.com/book/en/Git-Tools-Stashing
Je vous suggère d'aller une fois par le biais de la documentation de git ici. Lire aussi à propos de l'outil. Après cela, vous deviendrez le maître de git pour vous.
Je fais les choses un peu différemment. Caches pour moi, ce sont plus rapide sauve, pas tous les jours de travail, car ils ne le sont pas (facilement) granulaire dans ce que vous pouvez réellement cachette. (c'est à dire Si j'ai 20 fichiers modifiés et que je veux créer deux caches de dix chacun, il n'est pas facile à faire).
C'est pourquoi je veux ma vie de tous les changements qui s'engage à une réelle, quoique temporaire branche uniquement pour mon usage personnel, donc je peux comprendre des notes et tel de mon travail que je vais. Quotidien check-ins, des expériences, etc. Fondamentalement les choses, je ne pas voulez poussé à la finale des pensions.
Quand je suis dans un état où je suis prête à s'engager sur le repo, j'utilise le "soft reset" de la commande à la livraison j'ai à l'origine des branches à partir de. Ce qui met tout mon temp-branche-commis des modifications que les modifications en cours sur cet original s'engager sans de mon travail quotidien de l'histoire.
J'ai ensuite créer une nouvelle branche pour ces "nouveaux" changements et je peux valider tout à la fois, ou je peux le casser en morceaux plusieurs commits si elle a un sens (c'est à dire un pour le back-end de trucs, l'autre pour le front-end de trucs, l'autre pour les ressources, etc.)
Quand je suis fait, je suis parti avec une belle, nouvelle, propre branche avec une histoire qui a du sens pour d'autres devs, libre de mes notes quotidiennes, et prêt à fusionner et de pousser le repo. Ensuite, je peux supprimer mon temp de branches et de passer à la tâche suivante.
Bref...
Un autre avantage est que je peux en fait pousser le temporaire branches de la télécommande repo afin que je puisse travailler à partir de plusieurs endroits où vous ne pouvez pas faire avec une cachette. Rappelez-vous juste quand vous avez terminé, nettoyez les choses hors de l'server afin de conserver des pensions de navigation propre. (Certains pourraient faire valoir que, techniquement, les commits sont toujours là, détaché, ce qui est vrai, mais les branches sont de poids léger, dans GIT, et dans un sens, il devient un autre filet de sécurité pour ne pas perdre le travail que vous pouvez obtenir en retour un décollement de l'engager si vraiment nécessaire).