web-dev-qa-db-fra.com

Git stash uncached: comment ranger tous les changements non mis en scène?

Supposons que deux jeux de modifications soient effectués dans un projet versionné par git. Un ensemble est mis en scène et l'autre ne l'est pas.

Je voudrais revérifier les modifications par étapes en exécutant mon projet à cet état (avant de valider). Quel est un moyen simple de ranger toutes les modifications non mises en scène et de ne laisser que les mises en scène? J'ai donc besoin que les modifications non mises en scène disparaissent de mon projet, mais soient stockées quelque part pour un travail ultérieur.

Cela ressemble beaucoup à git stash commande. Mais git stash éloignerait les modifications non planifiées et par étapes de mon projet. Et je ne trouve pas quelque chose comme git stash uncached.

69
klm123

Mise à jour:
Même si c'est la réponse choisie, beaucoup ont souligné que la réponse ci-dessous est la bonne, je recommande de la vérifier.

Ancienne réponse :
Si l'option --keep-index Est utilisée, toutes les modifications déjà ajoutées à l'index restent intactes:

git stash --keep-index

De la documentation de git-stash :

Test des validations partielles

Vous pouvez utiliser git stash save --keep-index Lorsque vous souhaitez effectuer deux ou plusieurs validations des modifications dans l'arborescence de travail et que vous souhaitez tester chaque modification avant de valider:

# ... hack hack hack ...
$ git add --patch foo            # add just first part to the index
$ git stash save --keep-index    # save all other changes to the stash
$ edit/build/test first part
$ git commit -m 'First part'     # commit fully tested change
$ git stash pop                  # prepare to work on all other changes
# ... repeat above five steps until one commit remains ...
$ edit/build/test remaining parts
$ git commit foo -m 'Remaining parts'

Mais, si vous souhaitez simplement vérifier visuellement les modifications par étapes uniquement, vous pouvez essayer difftool :

git difftool --cached
75
Mohammad AbuShady

La réponse acceptée cache également les modifications par étapes, comme certains l'ont souligné, et ne stocke pas les fichiers non suivis. Voici un moyen de le faire sans obtenir vos modifications par étapes dans la cachette, tout en supprimant et en cachant les fichiers non suivis.

L'idée est de faire une validation temporaire de vos modifications par étapes, puis de cacher les modifications non par étapes, puis de annuler la validation temporaire:

# temp commit of your staged changes:
$ git commit --message "WIP"

# stage your previously unstaged files before stashing (so you get untracked files):
$ git add .

$ git stash

# now un-commit your WIP commit:
$ git reset --soft HEAD^

À ce stade, vous aurez une cachette de vos modifications non planifiées et vos modifications intermédiaires ne seront présentes que dans votre copie de travail.

65
stephen.hanson

J'ai trouvé que la réponse marquée ne fonctionnait pas pour moi car j'avais besoin de quelque chose qui ne cachait vraiment que mes changements non mis en scène. La réponse marquée, git stash --keep-index, stocke les modifications échelonnées et non échelonnées. Le --keep-index part laisse également l'index intact sur la copie de travail. Cela fonctionne pour OP, mais uniquement parce qu'il a posé une question légèrement différente de celle pour laquelle il voulait réellement la réponse.

Le seul vrai moyen que j'ai trouvé pour cacher les modifications non mises en scène est de ne pas utiliser du tout la cachette:

git diff > unstaged.diff
git apply -R unstaged.diff

git checkout -- . fonctionnera également au lieu de apply -R.

Travail travail travail ...

git apply unstaged.diff
rm unstaged.diff
15
Binary Phile

Git: cache les modifications non mises en scène

Cela stockera toutes les modifications que vous n'avez pas ajoutées:

git stash -k

Notez que les fichiers nouvellement créés (et non ajoutés) resteront dans votre répertoire de travail, sauf si vous utilisez également le -u commutateur.

git stash -k -u 

En outre, votre répertoire de travail doit être propre (c'est-à-dire que toutes les modifications doivent être ajoutées) lorsque vous git stash pop plus tard.

http://makandracards.com/makandra/853-git-stash-unstaged-changes

3
Cory Danielson