Dans Magit, quelle est la différence entre un «stash» et un «snapshot»?

17

Le manuel d'utilisation Magit comprend deux ensembles de « commandes » Stashing: commandes minuscules Enregistrer une planque , et les commandes en majuscules Enregistrer un instantané . Après avoir consulté Google et Stack Overflow et la git-stash(1)page de manuel, je ne sais toujours pas quelle est la différence.

Quelle est la différence?

Norman Ramsey
la source
1
Ma compréhension est que stashcela réinitialisera (annulera) également les modifications et snapshotlaissera les modifications dans l'espace de travail (pourrait être utile si vous allez réorganiser les commits avant de pousser).
wvxvw

Réponses:

24

Les variantes "stash" et "snapshot" créent les mêmes objets stash. La différence est que lorsque vous créez un instantané, les modifications stockées ne sont pas supprimées des fichiers dans l'arborescence de travail et / ou l'index. (Tout comme lorsque vous prenez un instantané de vos amis qui passent un bon moment - cela ne les fait pas disparaître non plus ;-)

Il s'agit en quelque sorte d'un mécanisme de sauvegarde. Supposons que vous effectuez une refactorisation compliquée et que vous venez de tester et que le code modifié semble toujours fonctionner mais que vous n'avez pas encore terminé. Ce serait le bon moment pour créer un instantané, de sorte que vous ayez quelque chose à revenir si vous vous trompez plus tard.

Bien sûr, vous pouvez simplement créer un commit "wip" temporaire, directement sur la branche sur laquelle vous travaillez, pour accomplir la même chose. C'est généralement ce que je fais.

Et vous pouvez également automatiser le processus d'enregistrement des travaux en cours en activant les modes de balayage . J'ai ces modes activés en tant que filet de sécurité, mais je crée toujours des validations wip directement sur la branche actuelle ou crée un instantané. Celles-ci sont plus faciles à utiliser que les références wip.

Notez que Magit est livré avec sa propre implémentation de stash écrite en Elisp. Cela était nécessaire pour implémenter les variantes de snapshot et les variantes de stash de worktree uniquement et d'index uniquement. Git ne fournit aucune de ces variantes.

tarse
la source