J'aimerais effectuer le flux de travail suivant:
- Ajoutez des modifications à la scène.
- Stockez toutes les autres modifications qui n'ont pas été mises en scène.
- Faites des choses avec les choses à l'étape (par exemple, construire, exécuter des tests, etc.)
- Appliquez la cachette.
Existe-t-il un moyen de faire l'étape 2?
Exemple
echo "123" > foo
git add foo # Assumes this is a git directory
echo "456" >> foo
git stash
cat foo # Should yield 123
man git stash
c'est beaucoup mieux.Réponses:
git stash save
a une option--keep-index
qui fait exactement ce dont vous avez besoin.Alors, cours
git stash save --keep-index
.la source
save
avecgit stash
. C'est peut-être le programmeur en moi qui insiste pour respecter la symétrie avec apply / pop. :)git stash save
est qu'il laisse également les modifications déjà mises en scène dans votre copie de travail. Dans le flux de travail ci-dessus, cela fonctionnerait bien car vous appliquez simplement la cachette au-dessus d'une copie locale qui a déjà la moitié des modifications de la cachette (ce que git est assez intelligent pour ignorer). Mais si vous modifiez le code avant de réappliquer le stash, vous pouvez potentiellement voir des conflits de fusion lorsque vous allez appliquer. Fyi.git commit --ammend
s'il y a des problèmes dans ce que j'ai commis.--amend
(plutôt que--ammend
)Cela peut se faire en 3 étapes: enregistrer les modifications par étapes, cacher tout le reste, restaurer l'index avec les modifications par étapes. Ce qui est essentiellement:
Cela fera exactement ce que vous voulez.
la source
-u
stocke également les fichiers non suivis.git stash save --keep-index
fait avec beaucoup plus de travail. Je ne vois aucun avantage.Aussi, Re:
R: Parce que vous devez toujours archiver le code testé :) Cela signifie que vous devez exécuter les tests avec uniquement les modifications que vous êtes sur le point de valider
Tout cela mis à part le fait que, bien sûr, en tant que programmeur expérimenté, vous avez l'envie innée de tester et de réviser uniquement ces changements - ne plaisantant qu'en partie
la source
Avec
git version 2.7.4
vous pouvez faire:Le
git
vous demandera d'ajouter ou non vos modifications dans la cachette.Et vous répondez alors simplement
y
oun
Vous pouvez restaurer le répertoire de travail comme vous le faites toujours:
ou, si vous souhaitez conserver les modifications enregistrées dans la réserve:
la source
En étendant les réponses précédentes, j'ai parfois un ensemble complexe de changements mis en scène, mais je souhaite d'abord valider un changement distinct. Par exemple, j'ai peut-être repéré un bogue ou un autre code incorrect que j'aimerais corriger avant mes modifications par étapes. Une voie possible à suivre est la suivante:
cache d'abord tout, mais laisse les changements par étapes intacts
maintenant également les modifications mises en scène séparément
apporter des modifications pour corriger; et test; les engager:
maintenant restaurez les modifications précédemment mises en scène:
résoudre tout conflit, et notez que s'il y avait des conflits, git aura appliqué mais pas supprimé cette entrée de la première réserve.
(... Ensuite, validez les modifications par étapes, restaurez la cachette de toutes les autres modifications et continuez ...)
la source
Pour ajouter les fichiers non marqués (non ajoutés à la validation) à la stash, exécutez la commande suivante:
Ensuite, vous pouvez valider les fichiers intermédiaires. Après cela, vous pouvez récupérer les derniers fichiers cachés en utilisant la commande:
la source
Cacher uniquement l'arbre de travail (modifications non mises en scène) dans Git est plus difficile qu'il ne devrait l'être. La réponse acceptée cache les modifications non mises en scène , mais aussi les modifications mises en scène (et les laisse également mises en scène), ce qui est rarement ce que vous voulez.
Cet alias fonctionne bien:
Il valide temporairement les modifications par étapes, crée une cachette à partir des modifications restantes (et permet à des arguments supplémentaires tels que
--include-untracked
et--message
d'être passés comme arguments d'alias), puis réinitialise la validation temporaire pour récupérer les modifications par étapes.Il est similaire à la réponse de @Simon Knapp , mais avec quelques différences mineures - il utilise
--quiet
les actions temporaires prises, et il accepte n'importe quel nombre de paramètres pour le stashpush
, plutôt que de coder en dur le-m
, et il ajoute--soft
à la finale réinitialiser de sorte que l'index reste tel qu'il a commencé.Pour le problème opposé de ne cacher que les modifications échelonnées (alias
stash-index
), consultez cette réponse .la source
Un autre conseil, lié à la question:
Lorsque vous stockez efficacement vos modifications non mises en scène à l'aide de
vous souhaiterez peut-être donner un message à la cachette, de sorte que lorsque vous ferez,
git stash list
il sera plus évident de savoir ce que vous avez caché auparavant, surtout si vous suivez cette opération de cachette par d'autres sauvegardes. Par exemple(bien qu'en réalité il contienne tous les changements comme indiqué dans les autres réponses).
Par exemple, ce qui précède peut être immédiatement suivi par:
Attention, cependant, vous ne pouvez pas utiliser
pour restaurer uniquement les modifications non mises en scène.
la source
Git n'a pas de commande qui ne cache que vos modifications non mises en scène.
Git vous permet cependant de spécifier les fichiers que vous souhaitez cacher.
Si vous souhaitez uniquement cacher des modifications spécifiques dans ces fichiers, ajoutez l'
--patch
option.L'
--include-untracked
option vous permet de cacher des fichiers non suivis.Exécutez
git help stash
(ouman git-stash
) pour plus d'informations.Remarque: Si vos modifications non mises en scène sont plutôt désorganisées, la réponse de @ alesguzik est probablement plus facile.
la source
La forme moderne de cette commande est
git stash push [--] [<pathspec>...]
, puisque Git 2.16+ (git stash save
est déconseillé )Vous pouvez combiner cela avec un formulaire générique, par exemple:
Mais cela ne fonctionne pas bien avec Git pour Windows, jusqu'à Git 2.22 (Q2 2019), voir le problème 2037 , considérant qu'il
git stash
a été réimplémenté en C (au lieu d'un script shell)Voir commit 7db9302 (11 mars 2019) par Thomas Gummerer (
tgummerer
) .Voir commit 1366c78 , commit 7b556aa (07 mars 2019) par Johannes Schindelin (
dscho
) .(Fusionné par Junio C Hamano -
gitster
- en commit 0ba1ba4 , 22 avril 2019)la source
J'utilise un alias, qui accepte une chaîne à utiliser comme message pour l'entrée cachée.
Lequel:
-u
ou-a
),--soft
pour le garder dans l'index).la source