Git stash est-il spécifique à une branche ou à l'ensemble du dépôt?
je suis entré dans une succursale et j'ai fait du travail. Je voulais aller dans une autre direction, mais ne veulent pas s'engager alors je l'ai fait git stash
. Ensuite, j'ai fait git checkout <otherbranch>
. J'ai travaillé là-bas et, comme dans la première branche, j'ai voulu en changer avant de m'engager dans le travail. J'ai donc fait git stash
là aussi. Je suis retourné à la première branche et j'ai essayé de la détacher (git stash pop
) en pensant qu'il obtiendrait le coffre de cette branche spécifique. J'ai été surpris qu'il unstashed la cachette de <otherbranch>
(dernière planquer.) J'étais sous l'impression que stash est direction, mais ce comportement indique qu'il existe une seule cachette pour l'ensemble du référentiel local.
git stash
branche spécifique ou pour l'ensemble du référentiel? Si c'est pour l'ensemble du référentiel, puis-je passer des options pour le rendre branche spécifique?
3 réponses
voir la cachette de la pile:
git stash list
pour choisir une cachette spécifique à partir de la pile, référez-vous à elle par le stash@{number}
montré par ce qui précède.
Si vous voulez le comportement par branche, vous pouvez simplement faire un commit (ou plusieurs commits) sur la branche. Vous pouvez toujours "défaire" le commit(s) ultérieure (par exemple,git reset
--soft
ou --mixed
; voir git reset de la documentation;git rebase -i
pour ne conserver que les éventuels "réels" commit (s) alors que rejet des temporalités).
(vraiment émuler git stash
vous avez besoin d'au moins deux propagations, une pour l'état index et une pour l'état work-tree. Si vous n'avez pas l'intention de sauvegarder et de restaurer l'état de l'index, vous pouvez tout simplement git add -A
tout l'état de l'arbre de travail et mettez cela dans la Commission temporaire. Alternativement,git stash
est un script shell donc vous pouvez le copier et le modifier assez facilement pour le faire fonctionner par défaut par branche, en utilisant, par exemple,refs/pb-stash/branch
comme son nom l'espace, plutôt que de le mondial unique refs/stash
pour la totalité de la pension. Vous pourriez quand même apporter une cachette d'une branche à l'autre en la nommant explicitement.)
non et Non. git stash est par dépôt.
Ici est une belle page sur la façon de l'utiliser.
git stash
n'est pas par branche.
- au Lieu de
git stash
(qui peut être perdu facilement quand vous avez beaucoup de cachettes et de branches) - je suggère de faire un
git commit
pour sauver le code inachevé dans votre branche et quand vous êtes prêt à finir le code faire ungit reset ${COMMIT_HASH_VALUE}
pour obtenir de l'inachevé code git commit
etgit reset
lorsqu'il est utilisé ensemble correctement peut simuler ungit stash
pour un branche
voici un scénario courant de la vie réelle qui démontre la valeur et l'usage du commit
et reset
commandes:
- vous travaillez sur la branche X et votre code ne compile ni ne passe les tests
- il y a un bug qui est plus prioritaire que la nouvelle fonctionnalité actuelle et vous devez donc commencer à travailler immédiatement sur la correction de bug
- plutôt que de faire un git stash (et le coffre perdu dans le mélange parce que vous avez beaucoup de cachettes et beaucoup de branches)
- vous pouvez faire un
- écrire
COMMIT_HASH_VALUE
pour plus tard
git reset ${COMMIT_HASH_VALUE}
(pour info la valeur par défaut de git reset
--mixed
)