web-dev-qa-db-fra.com

git annuler toutes les modifications non validées ou non enregistrées

J'essaie d'annuler toutes les modifications depuis mon dernier commit. J'ai essayé git reset --hard et git reset --hard HEAD après avoir visionné 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?

722
Antarr Byrd
  • Cela déchaînera tous les fichiers que vous avez éventuellement stockés avec git add:

    git reset
    
  • Ceci annulera toutes les modifications locales non validées (elles doivent être exécutées dans la racine du référentiel):

    git checkout .
    

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

    git checkout [some_dir|file.txt]
    

    Encore un autre moyen de revenir sur 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, ainsi seulement les fichiers suivis par git restent:

    git clean -fdx
    

    WARNING:-x supprimera également tous les fichiers ignorés, y compris ceux spécifiés par .gitignore! Vous souhaiterez peut-être utiliser -n pour prévisualiser les fichiers à supprimer.


Pour résumer: l’exécution des commandes ci-dessous est fondamentalement équivalente à fresh git clone depuis la source originale (mais cela ne re-télécharge rien, c’est beaucoup plus rapide):

git reset
git checkout .
git clean -fdx

Cela est généralement utilisé dans les scripts de construction, lorsque vous devez vous assurer que votre arborescence est parfaitement propre - aucune modification ni fichier d’objet créé localement, ni artefacts ne sont créés, et vous voulez que cela fonctionne très rapidement et que vous ne le fassiez pas. cloner tout le référentiel à chaque fois.

1419
mvp

Si vous souhaitez "annuler", toutes les modifications non validées sont exécutées simplement:

git stash
git stash drop

Si vous avez des fichiers non suivis (vérifiez en exécutant git status]), vous pouvez les supprimer en exécutant:

git clean -fdx

git stash crée une nouvelle réserve qui deviendra réserve @ {0}. Si vous souhaitez vérifier d'abord, vous pouvez exécuter git stash list pour voir une liste de vos caches. 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 cachette porte le nom du message de validation précédent.

136
Abram

il y a aussi git stash - qui "bloque" vos modifications locales et peut être réappliqué ultérieurement ou abandonné s'il n'est plus nécessaire

plus info sur le stockage

20
keshav

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

1) juste besoin de réinitialiser le statut du fichier d'espace de travail

enter image description here 2) sélectionnez tous les fichiers de la séquence (commande + a), cliquez avec le bouton droit de la souris et sélectionnez Supprimer.

enter image description here

C'est aussi simple que ça: D

12
user1872384

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 de même depuis l'interface utilisateur en utilisant "restaurer à partir de l'historique local" pour la référence: restaurer à partir de l'historique local

7
Abdul Rahman K

États passant d'un engagement à un autre

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 le 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 de git clone, sans rien télécharger à nouveau

git reset; git checkout .; git clean -fdx
4
Zii

Ce que je fais c'est

git add . (adding everything)
git stash 
git stash drop

Une doublure: git add . && git stash && git stash drop

2
Ralph