Je suivais les instructions pour créer des pages github et j'ai oublié de descendre dans mon sous-répertoire git. En conséquence, je viens de détruire un répertoire entier de documents avec git clean -fdx
.
Est-il possible de réparer cette terrible erreur?
119
git clean -fdx
sans aucun avertissement que l'opération est si dangereuse. Je me demande combien de personnes ont irrévocablement détruit leurs fichiers avec cette suggestion apparemment innocente.git clean
appels par inadvertance . Aussi, essayez de sortir de l'habitude de nettoyer sans vérifier. Créez un script Powershell ou Bash qui peut être appelé qui s'exécuteragit clean -fdxn
avec une invite de confirmation avant d'exécuter réellement le nettoyage incroyablement destructeur.Réponses:
Non. Ces fichiers ont disparu.
(Juste vérifié sur Linux: git clean calls
unlink()
, et ne sauvegarde rien au préalable.)la source
git clean
avait accidentellement supprimé les modifications mises en attente dans le.idea
dossier caché et l'histoire locale m'a sauvé!Fera un essai à sec et vous montrera quels fichiers seraient supprimés si vous exécutiez
(bien sûr, cela n'est utile que si vous le savez à l'avance, mais pour la prochaine fois)
la source
-n
fonctionne sur la plupart des commandes git (et de nombreuses autres commandes * nix).IntelliJ / Android Studio permet de restaurer des fichiers à partir de l'historique local .
la source
Non. "Git clean -fdx" supprimera tous les fichiers et répertoires que git ne suit pas de votre répertoire de travail. Étant donné que Git ne suit pas ces fichiers, il n'aura aucune sauvegarde de ces fichiers. Du moins pas d'habitude.
Si vous avez fait un 'git add' sur l'un de ces fichiers relativement récemment (mais que vous avez abandonné le commit), il y a une chance que vous puissiez le trouver avec 'git fsck --lost-found'. Cela vaut la peine d'essayer, mais n'espérez pas trop.
À l'avenir, vous devriez envisager de vous engager plusieurs fois trop souvent plutôt que quelques fois trop rarement. De cette façon, vous aurez au moins une sauvegarde locale, même si vous ne finissez pas par pousser ces commits vers une télécommande.
la source
mkdir
dépôt après l'avoir utiliséComme @kusma mentionné ci-dessus, si vous avez de la chance (si vous avez déjà fait "git add"), vous pouvez utiliser ce qui suit pour extraire l'objet entier:
De cette façon, il recherchera tous les types de morceaux, collectera les différences entières et ajoutera à un fichier que vous pourrez extraire du fichier perdu. Dans mon cas, j'avais perdu une classe Java entière.
la source
Si vous utilisez un IDE Jetbrains, il existe une option pour voir l'historique local d'un fichier. Dans le cas où vous avez fait
git clean
, vous pouvez recréer le fichier et vérifier l'historique local du fichier et le restaurer à partir de là.A travaillé pour moi pour un seul fichier. Pour un répertoire complet, je ne sais pas comment faire cela.
la source
J'ai eu ce problème aujourd'hui.
Comme d'autres l'ont dit, git ne conserve pas les fichiers.
La seule façon d'annuler cela est d'utiliser un utilitaire de restauration. J'ai utilisé "extundelete" et j'ai tout récupéré, mais votre kilométrage / système de fichiers peut varier.
la source
Si vous travaillez sur Eclipse, l'une des solutions possibles est de restaurer à partir de l'historique local d'Eclipse.
la source
En fait oui ! C'est possible! Mais sans utiliser les commandes git.
Tout ce dont nous avons besoin est juste un outil de récupération de fichiers comme Recuva .
Mentionnez simplement le chemin d'où il a été supprimé et laissez-le récupérer les fichiers.
Voici également quelques notes utiles pour utiliser cette application:
Advanced Mode
->Options
->Actions
->Restore folder structure
Avec cela, tous vos fichiers seront récupérés en conservant la structure des dossiers, ce sera donc beaucoup plus facile pour simplement faire glisser et déposer ce dossier vers le chemin d'où il a été supprimé.
Avertissement!Dès que vous perdez (supprimez accidentellement) un fichier, essayez de ne pas toucher (ajouter / modifier des fichiers) le lecteur d'où il a été supprimé pour augmenter les possibilités de récupération réussie. Sinon, vous risquez de perdre complètement ce fichier.
Pourquoi cela fonctionne: lorsque vous supprimez un fichier, il n'est en fait pas supprimé. Il est simplement marqué comme «supprimé», donc la prochaine fois que vous ajoutez / mettez à jour des fichiers sur le même lecteur, ces anciens fichiers sont remplacés par les nouveaux. Mais jusqu'à ce qu'ils soient écrasés, il est toujours possible de lire (et bien sûr de récupérer) les fichiers.
la source
Je l'ai fait avec un code que je devais ajouter à mon référentiel et j'ai nettoyé avec -dfx je pourrais restaurer les fichiers.
J'ai essayé d'utiliser debugfs, look and link from inodes, testdisk et de nombreux autres outils qui apparaissent et aucun n'a trouvé le répertoire que cette écriture stupide a effacé par accident.
Téléchargez extundelete depuis sourceforge.
Vous devrez probablement installer le package e2fslibs-dev
Run
Il générera le binaire pour extundelete dans le dossier src Dans mon cas, j'ai mal effacé un dossier. appelons ça FOOBAR
Je viens de courir:
et il a créé un dossier nommé RESTORED_FOLDERS
la source
Si vous utilisez git avec MSBuild, j'ai créé une cible qui copie tous les fichiers puis le fait
git clean -xdf
. De cette façon, vous pouvez facilement restaurer le fichier si vous réalisez que vous avez supprimé quelque chose que vous ne vouliez pas supprimer. Jetez un œil ici: http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msbuild/la source
Si vous utilisez un mac et sauvegardé avec un
Time Machine
, vous pouvez restaurerla source
Heureusement, j'ai fait cette erreur en utilisant Windows 7. Je suis allé dans la corbeille, j'ai mis en évidence tous les fichiers supprimés et j'ai cliqué sur "Restaurer". Terminé.
la source
git clean
ne déplace pas les fichiers vers la corbeille.Si vous n'avez pas poussé vos modifications (git push), vous pouvez également ramener les informations de votre serveur qui ne sont pas encore mises à jour. J'ai utilisé filezilla pour ramener les fichiers que j'ai supprimés et les ai copiés dans mes fichiers locaux. Ce n'est pas la meilleure façon de le faire, mais cela fonctionne et évite d'utiliser la console
la source