Ai-je accidentellement dit git rm -r .
. Comment puis-je m'en remettre?
Je ne me suis pas engagé.
Je pense que tous les fichiers ont été marqués pour suppression et ont également été physiquement supprimés de ma caisse locale.
EDIT: je pourrais (si je connaissais la commande) revenir au dernier commit. Mais ce serait beaucoup mieux si je pouvais juste 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 le git rm -r .
.
-f
àgit rm
git, vous n'aurez supprimé aucun fichier contenant des modifications intermédiaires ou non, donc ilgit reset; git checkout .
devrait tout récupérer.git restore
:git restore -s@ -SW -- .
. Voir ma réponse ci-dessous .Réponses:
Devrait le faire. Si vous n'avez aucune modification non validée dont vous vous souciez, alors
devrait forcer tout réinitialiser à votre dernier commit. Si vous avez des modifications non validées, mais que la première commande ne fonctionne pas, enregistrez vos modifications non validées avec
git stash
:la source
git reset --hard HEAD
détruit toutes les modifications utiles que vous avez apportées dans les répertoires parents du répertoire de travail actuel.J'ai git-rm'd quelques fichiers et j'ai continué à 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 cacher et de réinitialiser, vous pouvez simplement extraire les fichiers individuels que vous avez manqués / supprimés si vous le souhaitez:
Cela laisse vos autres modifications non validées intactes sans solution de contournement.
la source
git rm
plutôt que sur un récursif entiergit rm -r
. Pour une suppression récursive complète, les autres solutions peuvent être meilleures, selon la quantité de fichiers supprimés.Pour récupérer certains fichiers ou dossiers, on peut utiliser ce qui suit
Cela va 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 un hachage de validation aux deux commandes pour recréer des fichiers à partir d'un commit plus ancien. Voir
git reset --help
etgit checkout --help
pour plus de détails.la source
git rm
opération sans effacer les autres modifications non validées.Mise à jour:
Puisque
git rm .
supprime tous les fichiers de ce répertoire et des répertoires enfants dans la caisse de travail ainsi que dans l'index, vous devez annuler chacune de ces modifications:Cela devrait faire ce que vous voulez. Il n'affecte pas les dossiers parents de votre code ou index extrait.
Ancienne réponse qui n'était pas:
fera l'affaire et n'effacera pas les modifications non validées que vous avez apportées à vos fichiers.
après cela, vous devez répéter toutes les
git add
commandes que vous aviez mises en file d'attente.la source
git alias.co="checkout"
pour quegit co
cela passe à la caisse.Si vous vous retrouvez avec rien de ce qui précède, vous pourriez être en mesure de récupérer des données en utilisant la suggestion d'ici: http://www.spinics.net/lists/git/msg62499.html
la source
annuler git rm
annuler git rm -r
annuler git rm -rf
Uncommitted changes
comprendnot staged changes
,staged changes but not committed
.la source
git rm -rf
, car cela peut également supprimer les fichiers non suivis ou intermédiaires (uniquement).git rm -rf file
etgit rm -rf dir
ne supprimera aucun fichier non suivi.Si vous avez validé et poussé les modifications, vous pouvez le faire pour récupérer le fichier
la source
Il y a déjà de bonnes réponses, mais je pourrais suggérer une syntaxe peu utilisée qui non seulement fonctionne très bien, mais est très explicite dans ce que vous voulez (donc pas effrayante ou mystérieuse)
la source
Obtenir la validation de la liste
Par exemple, Stable commit hash:
45ff319c360cd7bd5442c0fbbe14202d20ccdf81
la source
J'avais une situation identique. Dans mon cas, la solution était:
la source
Avec Git 2.23+ (août 2019), la commande appropriée pour restaurer les fichiers (et l'index) serait à utiliser ...
git restore
(pasreset --hard
ou la commande confusegit checkout
)C'est:
Ou sa forme abrégée:
la source
J'avais exactement le même problème: nettoyer mes dossiers, réorganiser et déplacer des fichiers. Je suis entré: git rm .et appuyez sur Entrée; puis j'ai senti mes entrailles se desserrer un peu. Heureusement, je n'ai pas tout de suite tapé git commit -m "".
Cependant, la commande suivante
tout restauré et sauvé ma vie.
la source