Les pubs vous déplaisent ? Aller Sans pub Auj.

git stash — Plus qu’un sauvetage d’urgence (Sauvegardes partielles, Sauvegardes nommées et le reste)

Mis à jour le

Au-delà de la sauvegarde en cas de panique : les regroupements nommés, la liste des regroupements, affichage -p, regroupement partiel avec --patch, application versus pop, et la difficulté rencontrée avec les fichiers non suivis que vous rencontrerez un jour.

git stash — Plus qu'un sauvetage en cas de panique (Dépôts partiels, Dépô- ts nommés et le reste) 1
ANNONCE · Supprimer ?

Vous avez appris git stash en panique. Quelqu'un vous a pingué au milieu d'une fonctionnalité, vous avez dû passer immédiatement à une autre branche, et le stash était la sortie la plus rapide. Cela a sauvé la journée.

Puis vous aviez trois stashes, vous vous souveniez pas de ce qu'ils contenaient, vous avez mis le mauvais un sur la mauvaise branche, et vous avez décidé que le stash était cassé. Ce n'est pas cassé. Vous avez juste besoin d'apprendre quelques commandes de plus.

Les fichiers non suivis vous ont surpris (lisez d'abord cela)

git stash sauvegarde uniquement suivis des fichiers — des fichiers déjà connus par git. Les nouveaux fichiers que vous n'avez pas encore préparés sont invisibles pour git.

# You created a new file mid-feature
echo "temp work" > new-feature.js

git stash
# new-feature.js is still sitting there — stash ignored it entirely

Ajouter -u pour inclure les fichiers non suivis :

git stash push -u

Il y a aussi -a (--all) qui inclut aussi les fichiers ignorés. Cela ne correspond presque jamais à ce que vous voulez — il va sauvegarder vos node_modules modifications et .env fichiers et rendra le restauration un cauchemar.

Nommez vos stashes avant de vous regretter

Le message par défaut du stash est :

stash@{0}: WIP on main: a3f1c2d Update dependencies

Cela n'a pas de sens quand vous avez trois stashes provenant de trois fonctionnalités incomplètes. Utilisez git stash push -m pour les nommer :

git stash push -u -m "wip: oauth token refresh flow"
git stash push -u -m "experiment: lazy load images on scroll"
git stash push -u -m "fix: header z-index issue"

Maintenant git stash list est en fait lisible :

stash@{0}: On main: fix: header z-index issue
stash@{1}: On feature/images: experiment: lazy load images on scroll
stash@{2}: On feature/auth: wip: oauth token refresh flow

Appliquez un spécifique par indice :

git stash apply stash@{2}   # brings back the auth work

Inspectez avant d'appliquer : stash show -p

git stash show vous donne un résumé des fichiers modifiés. Ajoutez -p pour le diff complet :

git stash show -p stash@{2}

C'est la commande que la plupart des gens sautent et qu'ils regrettent ensuite. Sans elle, vous restaurez des modifications de manière aveugle sur une branche qui peut avoir évolué considérablement depuis que vous avez mis en attente. Une rapide show -p prend dix secondes et vous indique exactement ce que vous allez appliquer.

Si vous souhaitez comparer le diff du stash avec l'état actuel d'un fichier côte à côte, collez les deux dans l'outil Comparaison de texte — plus rapide que de les manipuler dans votre tête. git diff stash@{N}..HEAD -- path/to/file appliquer vs pop : une différence qui compte vraiment

Les deux commandes restaurent votre stash. Une différence cruciale :

= appliquer + supprimer l'entrée du stash

  • git stash pop = appliquer, garder l'entrée du stash
  • git stash apply Si vous

et rencontrez un conflit de fusion, git supprime l'entrée du stash avant que vous n'ayez résolu quoi que ce soit. Vous avez maintenant un arbre de travail en conflit et aucune référence de stash pour revenir en arrière. pop garde l'entrée pendant que vous résolvez le conflit, puis vous nettoyez manuellement :

apply L'étape supplémentaire vaut le coup quand le stash représente des heures de travail.

# Safer workflow when conflicts are possible
git stash apply stash@{0}
# resolve any conflicts
git stash drop stash@{0}   # explicit cleanup once you're happy

Stash partiel avec –patch drop Parfois, vous ne voulez que sauvegarder une partie de vos modifications. Vous avez un correctif et une moitié d'une nouvelle fonctionnalité dans le même fichier, et vous voulez commiter le correctif tout en sauvegardant le code de la fonctionnalité.

) ouvre une session interactive par morceau :

Pour chaque morceau, vous obtenez la même

git stash push --patch (ou -pinterface que

git stash push -p -m "wip: new feature half"

. Tapez y/n/s/q pour diviser un morceau en morceaux plus petits si le partage automatique de git n'est pas assez fin. Cela prend plus de temps qu'un simple stash, mais c'est la méthode la plus propre pour diviser un arbre de travail sale sans créer une branche de secours. git add -pUne limitation : s mode ne comprend pas les fichiers non suivis, donc vous ne pouvez pas le combiner avec

. Si vous avez des nouveaux fichiers non suivis qui font partie de la fonctionnalité que vous sauvegardez, vous devrez les --patch d'abord pour les rendre suivis, puis exécuter le stash partiel. -uCas d'utilisation réels git add Passer d'une tâche à une autre au milieu d'une fonctionnalité.

Un revueur laisse un retour urgent sur une autre PR pendant que vous êtes plongé dans du code non terminé. Sauvegardez avec un nom, passez à une autre branche, faites la revue, revenez et appliquez. Aucun commit en cours, aucune gymnastique de branche.

Vérification d'une exécution propre des tests. Vous souhaitez confirmer que vos tests passent sur un arbre de travail propre — pas avec vos modifications partielles qui s'infiltreront accidentellement dans l'environnement de test :

git stash push -u -m "wip: refactor auth middleware"
git checkout fix/urgent-prod-bug
# ... review and fix ...
git checkout feature/auth-refactor
git stash pop

Cela détecte le cas où les tests passent uniquement grâce à des modifications locales. Cela arrive plus souvent que vous ne le pensez dans les dépôts ayant des fixtures de test partagés. Passer à une autre branche avec un arbre de travail en conflit.

git stash push -u
npm test          # or pytest, cargo test, whatever
git stash pop

Git refuse de vérifier une branche lorsque votre arbre de travail contient des modifications qui seraient supprimées. Sauvegardez d'abord, passez à la branche, restaurez. Plus rapide que

de simplement changer de branche. fiche de référence git stash git commit --fixup Sauvegarde les modifications suivies (abréviation :

Inclure les fichiers non suivis

CommandeCe que fait la balise
git stash pushSauvegarde avec un nom descriptif git stash)
git stash push -uFichiers non suivis + nommé (le combo que vous utiliserez le plus)
git stash push -m "name"Sauvegarde partielle interactive (par morceau)
git stash push -u -m "name"Liste tous les stashes
git stash push -pRésumé des fichiers modifiés dans un stash
git stash listDiff complet d'un stash
git stash show stash@{N}Applique un stash, garde l'entrée
git stash show -p stash@{N}Applique le dernier stash, supprime l'entrée
git stash apply stash@{N}Supprime une entrée spécifique du stash
git stash popSupprime toutes les entrées du stash
git stash drop stash@{N}Crée une nouvelle branche à partir d'un stash et l'applique
git stash clearL'échappatoire de la branche de stash
git stash branch <branchname>Une autre commande à connaître :

. Cela crée une nouvelle branche au commit où vous avez mis en attente, applique le stash et le supprime s'il n'y a pas de conflit. C'est la bonne solution lorsque vos modifications sauvegardées sont devenues trop importantes pour mériter leur propre branche — et elle évite complètement les conflits car vous réappliquez le stash sur l'arbre exact où il a été créé.

L'habitude qui résout 90% de douleurs liées au stash : nommer tout avec git stash branch <branchname>, et utiliser

jusqu'à ce que vous soyez sûr que les modifications ont été intégrées proprement. L'étape supplémentaire coûte deux secondes. Perdre un stash dont vous avez besoin coûte beaucoup plus. -mgit stash — Plus qu'une sauvegarde en cas de panique (Sauvegarde partielle, stashes nommés et le reste) 2 apply au lieu de pop git stash — Plus qu'une sauvegarde en cas de panique (Sauvegarde partielle, stashes nommés et le reste) 1 drop une étape dure deux secondes. Perdre un dépôt que vous avez besoin coûte beaucoup plus.

Envie d'une expérience sans pub ? Passez à la version sans pub

Installez nos extensions

Ajoutez des outils IO à votre navigateur préféré pour un accès instantané et une recherche plus rapide

Sur Extension Chrome Sur Extension de bord Sur Extension Firefox Sur Extension de l'opéra

Le Tableau de Bord Est Arrivé !

Tableau de Bord est une façon amusante de suivre vos jeux, toutes les données sont stockées dans votre navigateur. D'autres fonctionnalités arrivent bientôt !

ANNONCE · Supprimer ?
ANNONCE · Supprimer ?
ANNONCE · Supprimer ?

Coin des nouvelles avec points forts techniques

Impliquez-vous

Aidez-nous à continuer à fournir des outils gratuits et précieux

Offre-moi un café
ANNONCE · Supprimer ?