git undo toutes les modifications non engagées ou non avérées

j'essaie d'annuler tous les changements depuis mon dernier engagement. J'ai essayé git reset --hard et git reset --hard HEAD après avoir regardé 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à. Ce qui me manque?

577
demandé sur commonSenseCode 2012-12-29 00:46:53

6 réponses

  • cela va décongeler tous les fichiers que vous auriez pu mettre en scène avec git add :

    git reset
    
  • cette option rétablira toutes les modifications locales non engagées (qui doivent être exécutées dans repo root):

    git checkout .
    

    vous pouvez également revenir sur des changements non engagés uniquement dans un fichier ou un répertoire particulier:

    git checkout [some_dir|file.txt]
    

    encore une autre façon de revenir à toutes les modifications non engagé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 tracés, donc seulement les fichiers de suivi git restent:

    git clean -fdx
    

    AVERTISSEMENT: -x , vous supprimez également tous les fichiers ignorés, y compris ceux qui sont spécifiés par .gitignore ! Vous pouvez utiliser -n pour l'aperçu des fichiers à supprimer.


pour résumer: l'exécution des commandes ci-dessous est fondamentalement équivalente à fresh git clone de la source originale (mais il ne re-télécharger rien, donc est beaucoup plus rapide):

git reset
git checkout .
git clean -fdx

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

1153
répondu mvp 2018-06-08 21:31:24

Si vous voulez " annuler " toutes les modifications non validées exécutez simplement:

git stash
git stash drop

si vous avez des fichiers non tracés (vérifiez en lançant git status ), ceux-ci peuvent être supprimés en lançant:

git clean -fdx

git stash crée une nouvelle stash qui deviendra stash@{0} . Si vous souhaitez vérifier d'abord vous pouvez exécuter git stash list pour voir une liste de vos caches. Il 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 cachette est nommée d'après le message de commit précédent.

106
répondu Abram 2014-07-18 20:59:59

il y a aussi git stash - qui "cache" vos changements locaux et peut être appliqué à une date ultérieure ou abandonné si n'est plus nécessaire

plus les infos sur l'accrocher

15
répondu keshav 2012-12-28 21:17:00

j'utilise l'arbre des sources.... Vous pouvez annuler tous les changements non engagés avec 2 étapes faciles:

1) Il suffit de réinitialiser l'état du fichier workspace""

enter image description here 2) Sélectionnez tous les fichiers unstage (commande +a), faites un clic droit et sélectionnez Supprimer

enter image description here

c'est aussi simple que cela: d

11
répondu user1872384 2016-07-14 17:19:58

pour ceux qui sont arrivés ici en cherchant s'ils pouvaient annuler git clean -f -d , par lequel un fichier créé dans eclipse a été supprimé,

vous pouvez faire la même chose à partir de L'interface utilisateur en utilisant "restaurer à partir de l'histoire locale" pour réf: restaurer à partir de l'histoire locale

4
répondu Abdul Rahman K 2016-04-17 11:32:11

États de transition d'un commit à 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

l'Action de l'état en transition

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

équivalent du clone git, sans rien télécharger de nouveau

git reset; git checkout .; git clean -fdx
2
répondu Zii 2018-03-23 18:06:21