Comment annuler les modifications non validées y compris les fichiers et les dossiers?
-
24-10-2019 - |
Question
Y at-il une commande git pour annuler tous les changements non engagés dans un arbre de travail et de l'index et de supprimer également les fichiers nouvellement créés et les dossiers?
La solution
Vous pouvez exécuter ces deux commandes:
# Revert changes to modified files.
git reset --hard
# Remove all untracked files and directories. (`-f` is `force`, `-d` is `remove directories`)
git clean -fd
Autres conseils
Si vous souhaitez annuler les modifications que dans le répertoire de travail courant, utilisez
git checkout -- .
Et avant cela, vous pouvez lister les fichiers qui seront corrigées sans faire réellement une action, juste pour vérifier ce qui se passera, avec:
git checkout --
Utilisez "git checkout - ..." à des changements dans le répertoire de travail défausse
git checkout -- app/views/posts/index.html.erb
ou
git checkout -- *
supprime toutes les modifications apportées aux fichiers Unstaged statut git par exemple
modified: app/controllers/posts.rb
modified: app/views/posts/index.html.erb
Une façon non triviale consiste à exécuter ces deux commandes:
-
git stash
Cela déplacera vos modifications à la planque, vous ramener à l'état de HEAD -
git stash drop
Cela supprimera la dernière planque créé dans la dernière commande.
git clean -fd
n'a pas aidé, de nouveaux dossiers sont restés. Ce que je l'ai fait est totalement effacé tous les arbres de travail puis
git reset --hard
Voir « Comment puis-je effacer mon répertoire de travail local git » pour obtenir des conseils pour ajouter l'option -x
à nettoyer:?
git clean -fdx
Remarque drapeau -x
supprimera tous les fichiers ignorés par Git alors faites attention (voir la discussion dans la réponse que je réfère à).
Je pense que vous pouvez utiliser la commande suivante: git reset --hard
S'il vous plaît noter qu'il pourrait y avoir encore des fichiers qui ne semblent disparaître - ils pourraient être non édité, mais git aurait pu les marqué comme en cours d'édition en raison des changements CRLF / LF. Voyez si vous avez fait quelques changements dans .gitattributes
récemment.
Dans mon cas, je l'ai ajouté les paramètres de CRLF dans le fichier .gitattributes
et tous les fichiers est resté dans la liste des « fichiers modifiés » à cause de cela. Modification des paramètres .gitattributes fait disparaître.
Si vous avez un changement non engagé (son seul dans votre copie de travail) que vous souhaitez revenir à la copie dans votre dernière commettez, procédez comme suit:
git checkout filename
Vous pouvez simplement utiliser la commande git suivante qui peut revenir toutes les modifications non validées effectuées dans votre référentiel:
git checkout .
Exemple:
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: application/controllers/Drivers.php
modified: application/views/drivers/add.php
modified: application/views/drivers/load_driver_info.php
modified: uploads/drivers/drivers.xlsx
no changes added to commit (use "git add" and/or "git commit -a")
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git checkout .
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
Git 2.23 introduit commande git restore
pour restaurer les fichiers de travail d'arbres.
https://git-scm.com/docs/git-restore
Pour restaurer tous les fichiers dans le répertoire courant
git la restauration.
Si vous souhaitez restaurer tous les fichiers source C pour correspondre à la version de l'index, vous pouvez le faire
git restaurer '* .c'
Une façon sûre et à long:
-
git branch todelete
-
git checkout todelete
-
git add .
-
git commit -m "I did a bad thing, sorry"
-
git checkout develop
-
git branch -D todelete
J'utilise habituellement de cette façon qui fonctionne bien:
mv fold/file /tmp
git checkout fold/file
Utilisation:
git reset HEAD filepath
Par exemple:
git reset HEAD om211/src/META-INF/persistence.xml