Comment rétablir un “git rm-r .”?
Je accidentely dit git rm -r .
. Comment puis-je récupérer à partir de ce?
Je n'ai pas commis.
Je pense que tous les fichiers ont été marqués pour suppression et ont également été physiquement supprimé de mon local de la caisse.
EDIT: je pourrais (si je savais que la commande) revenir à la dernière validation. Mais il serait beaucoup mieux si je pouvais simplement annuler la git rm -r .
. Parce que je ne suis pas vraiment sûr de ce que j'ai fait après le dernier commit et avant la git rm -r .
.
- Pour cette question en particulier, reset --hard est une bonne solution...c'est déjà répertorié, donc je vais juste citer dans ce commentaire que vous pourriez vouloir vérifier la documentation de git-reflog.
- Notez que parce que vous n'avez pas à fournir
-f
àgit rm
git de ne pas avoir supprimé tous les fichiers qui avaient organisé ou unstaged changements donc ungit reset; git checkout .
devrait récupérer tout. - Il suffit de regarder - git checkout . pour effacer tous les unstaged changements.
- J'ai juste fait quelque chose comme cela, et je ne comprends pas pourquoi mes fichiers locaux où supprimé (et, comme l'OP, je n'ai pas encore commis.)
- Avec Git 2.23+ (août 2019), vous pouvez restaurer les fichiers avec
git restore
:git restore -s@ -SW -- .
. Voir ma réponse ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Devrait le faire. Si vous n'avez pas toutes les modifications non validées que vous vous souciez, puis
devrait réinitialisé force tout à votre dernier commit. Si vous avez des modifications non validées, mais la première commande ne fonctionne pas, puis enregistrez vos modifications non validées avec
git stash
:git reset --hard HEAD
détruit tout utile modifications que vous avez apportées dans le répertoire parent du répertoire de travail courant.git rm -r .
pourrait être exécuté dans n'importe quel sous-directement. Ceci permet de réinitialiser l'ensemble de l'arborescence. Voir @Jaime Bellmyer réponse.git stash -u
/git stash --include-untracked
si vos modifications récentes incluent de nouvelles (sans traces) des fichiers.git stash pop
vous pouvez utilisergit stash apply
. De cette façon, si il y a un conflit de fusion ou vous voulez enregistrer les modifications, sans leur être retiré à partir du haut de la cachette.git stash; git reset --hard HEAD; git stash pop
A fait l'affaire pour moi! Merci!Je git-rm avais quelques fichiers et est allé faire des changements avant mon prochain commit quand j'ai réalisé que j'avais besoin de certains de ces fichiers. Plutôt que de les cacher et de réinitialisation, vous pouvez simplement la caisse de l'individu fichiers que vous avez manqué/supprimé si vous voulez:
Ce qui laisse votre autres modifications non validées intact sans solutions de contournement.
git rm
plutôt qu'un ensemble récursifgit rm -r
. Pour un plein de suppression récursive, les autres solutions peut-être mieux, en fonction de la quantité de fichiers supprimés.De retrouver certains fichiers ou dossiers on peut utiliser les éléments suivants
Ce sera d'abord recréer les entrées d'index pour
path/to/file
et recréer le fichier tel qu'il était dans le dernier commit, c'est à direHEAD
.Astuce: on peut passer d'un commit de hachage pour les deux commandes de recréer des fichiers à partir d'une ancienne commettre. Voir
git reset --help
etgit checkout --help
pour plus de détails.git rm
opération sans l'essuyer d'autres modifications non validées.Mise à jour:
Depuis
git rm .
supprime tous les fichiers dans le présent et de l'enfant dans les répertoires de travail de départ ainsi que dans l'index, vous devez annuler chacun de ces changements:Cela devrait faire ce que vous voulez. Il n'affecte pas les dossiers parents de votre extrait de code ou de l'index.
Vieille réponse qui n'en était pas:
fera l'affaire, et ne sera pas effacer toutes les modifications non validées vous avez apportées à vos fichiers.
après que vous avez besoin de répéter tout
git add
commandes que vous avait mis en file d'attente.git alias.co="checkout"
de sorte quegit co
ne checkout.Si vous vous retrouvez avec rien de ce qui précède, vous pourriez être en mesure de récupérer des données à l'aide de la suggestion à partir d'ici: http://www.spinics.net/lists/git/msg62499.html
annuler git rm
annuler git rm-r
annuler git rm-rf
Uncommitted changes
comprendnot staged changes
,staged changes but not committed
.git rm -rf
, qui peut être supprimer sans traces ou de mise en scène (seulement) de fichiers.git rm -rf file
etgit rm -rf dir
ne supprimera pas sans traces de fichiers.Si vous avez commis et poussé les modifications, vous pouvez le faire pour obtenir le fichier
Il y a quelques bonnes réponses déjà, mais je pourrais suggérer un peu utilisé la syntaxe qui non seulement fonctionne très bien, mais est très explicite sur ce que vous voulez (à cet effet ne fait pas peur ou mystérieux)
Obtenir la liste commettre
Par exemple, Stable commit hash:
45ff319c360cd7bd5442c0fbbe14202d20ccdf81
J'ai eu une situation identique. Dans mon cas, la solution était:
Avec Git 2.23+ (août 2019), le bon de commande pour restaurer des fichiers (et l'index) woud être utiliser...
git restauration
(pasreset --hard
ou la déroutantgit checkout
commande)Qui est:
Ou son abréviation:
J'ai eu exactement le même problème: est-nettoyage de mes dossiers, la réorganisation et le déplacement de fichiers. J'ai entré: git rm . et appuyez sur entrée; et alors senti mes entrailles se détendre un peu. Heureusement, je n'ai pas de type dans git commit -m "" tout de suite.
Toutefois, la commande suivante
restauré tout, et m'a sauvé la vie.