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?
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.
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.
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
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""
2) Sélectionnez tous les fichiers unstage (commande +a), faites un clic droit et sélectionnez Supprimer
c'est aussi simple que cela: d
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
É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