Question git annuler tous les changements non validés ou non sauvegardés


J'essaye d'annuler tous les changements depuis mon dernier commit. j'ai essayé git reset --hard et git reset --hard HEAD après le visionnement ce post. Je réponds avec la tête est maintenant à 18c3773 ... mais quand je regarde ma source locale tous les fichiers sont toujours là. Qu'est-ce que je rate?


542
2017-12-28 20:46


origine


Réponses:


  • Cela déconstruira tous les fichiers que vous avez pu avoir avec git add:

    git reset
    
  • Cela annulera toutes les modifications locales non validées (doivent être exécutées dans la racine repo):

    git checkout .
    

    Vous pouvez également annuler les modifications non validées uniquement dans un fichier ou un répertoire particulier:

    git checkout [some_dir|file.txt]
    

    Une autre façon de rétablir toutes les modifications non validées (plus long à taper, mais fonctionne à partir de n'importe quel sous-répertoire):

    git reset --hard HEAD
    
  • Cela supprimera tous les fichiers locaux non suivis, donc seulement Les fichiers git suivis restent:

    git clean -fdx
    

    ATTENTION:  -x  va également supprimer tous les fichiers ignorés, y compris ceux spécifiés par .gitignore! Vous voudrez peut-être utiliser -n pour l'aperçu des fichiers à supprimer.


Pour résumer: l'exécution des commandes ci-dessous est fondamentalement équivalente à git clone à partir de la source originale (mais il ne télécharge rien, c'est beaucoup plus rapide):

git reset
git checkout .
git clean -fdx

L'utilisation typique pour ceci serait dans les scripts de construction, quand vous devez vous assurer que votre arbre est absolument propre - n'a pas de modifications ou de fichiers objets créés localement ou d'artefacts de construction, et vous voulez le faire fonctionner très rapidement et ne pas cloner le dépôt entier à chaque fois.


1094
2017-12-28 21:04



Si vous souhaitez "annuler"toutes les modifications non validées s'exécutent simplement:

git stash
git stash drop

Si vous avez des fichiers non suivis (vérifiez en exécutant git status), ceux-ci peuvent être supprimés en exécutant:

git clean -fdx

git stash crée une nouvelle cachette qui deviendra mettre en cache @ {0}. Si vous souhaitez vérifier d'abord, vous pouvez courir git stash list pour voir une liste de vos cachettes. Cela ressemblera à quelque chose comme:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

Chaque cache est nommé après le message de validation précédent.


97
2017-07-18 20:59



il y a aussi git stash - qui "stash" vos changements locaux et peuvent être réappliqués à un moment ultérieur ou abandonné si n'est plus nécessaire

plus info sur le cachetage


15
2017-12-28 21:17



J'utilise l'arborescence des sources .... Vous pouvez annuler toutes les modifications non validées en deux étapes simples:

1) juste besoin de réinitialiser l'état du fichier d'espace de travail

enter image description here 2) sélectionner tous les fichiers de déconstruction (commande + a), cliquer avec le bouton droit de la souris et sélectionner supprimer

enter image description here

C'est aussi simple que ça: D


11
2017-07-14 17:19



Pour ceux qui ont atteint ici en cherchant s'ils pouvaient défaire git clean -f -d , par lequel un fichier créé en éclipse A été supprimée,

Vous pouvez faire la même chose avec l'interface utilisateur en utilisant "restore from local history" pour ref:Restaurer de l'histoire locale


4
2017-08-28 09:31



États passant d'un commit à un nouveau commit

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

Action pour la transition d'état

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

Vérifier diff

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

Revenir au dernier commit

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

Equivalent de git clone, sans re-télécharger quoi que ce soit

git reset; git checkout .; git clean -fdx

1
2017-07-01 08:54