Je suivais les instructions sur faire des pages github , et j'ai oublié de descendre dans mon sous-répertoire git. En conséquence, je viens de balayer tout un répertoire de documents avec git clean -fdx
. Y a-t-il un moyen de réparer cette terrible erreur?
Non, ces fichiers sont partis.
(Juste vérifié sur Linux: git clean appelle unlink()
, et ne sauvegarde rien au préalable.)
git clean -fdxn
Fera un dry run , et vous montrera quels fichiers seront supprimés si vous couriez
git clean -fdx
(bien sûr, ce n'est utile que si vous le savez à l'avance, mais pour la prochaine fois)
Non. "Git clean -fdx" supprimera tous les fichiers et répertoires que git ne suit pas depuis votre répertoire de travail. Parce que Git ne suit pas ces fichiers, il n’aura aucune sauvegarde de ces fichiers. Du moins pas d'habitude.
Si vous avez effectué un ajout récent à l'un de ces fichiers (mais que le commit a été annulé), vous pouvez le trouver avec "git fsck --lost-found". Cela vaut la peine d'essayer, mais n'ayez pas trop d'espoir.
À l'avenir, vous devriez envisager de vous engager plutôt plusieurs fois, que trop rarement. De cette façon, vous aurez au moins une sauvegarde locale, même si vous ne forcez pas ces commits vers une télécommande.
IntelliJ/Android Studio permet la restauration de fichiers à partir de l'historique local .
Si vous travaillez sur Eclipse, l’une des solutions possibles est de restaurer à partir de l’historique local d’Eclipse.
J'ai eu ce problème aujourd'hui.
Comme d'autres l'ont dit, Git ne conserve pas les fichiers.
La seule façon de l'annuler consiste à utiliser un utilitaire de suppression. J'ai utilisé "extundelete" et tout récupéré, mais votre système de fichiers/kilométrage peut varier.
Comme @kusma mentionné ci-dessus, si vous êtes chanceux (si vous avez déjà "git add"), vous pouvez utiliser ce qui suit pour extraire l'objet entier:
git fsck | awk '{print $3}' | xargs git show | tee searchresults.log
De cette façon, il recherchera tous les types de morceaux, collectera les diffs complets et ajoutera à un fichier que vous pouvez extraire le fichier perdu. Dans mon cas, j'avais perdu toute une classe Java.
En fait Oui! C'est possible! Mais sans utiliser les commandes git.
Tout ce dont nous avons besoin n’est qu’un outil de récupération de fichier comme Recuva .
Il suffit de mentionner le chemin d’où il a été supprimé et de le laisser récupérer les fichiers.
Voici également quelques notes utiles pour utiliser cette application:
Advanced Mode
-> Options
-> Actions
-> Restore folder structure
Attention! Dès que vous perdez (supprimez accidentellement) un fichier, essayez de ne pas toucher (ajouter/éditer des fichiers) le lecteur à partir duquel il a été supprimé pour augmenter les chances de récupération. Sinon, vous risquez de perdre complètement ce fichier.
Pourquoi cela fonctionne: Lorsque vous supprimez un fichier, en réalité, il n'est 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 écrasé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.
Si vous utilisez un Jetbrains IDE, une option vous permet de voir l'historique local d'un fichier. Si vous avez déjà exécuté git clean
, vous pouvez recréer le fichier, vérifier l'historique local du fichier et le restaurer à partir de là.
Travaillé pour moi pour un seul fichier. Pour un répertoire complet, je ne sais pas comment faire cela.
Heureusement, j'ai commis cette erreur en utilisant Windows 7. Je suis allé dans la corbeille, a mis en évidence tous les fichiers supprimés et cliqué sur "Restaurer". Terminé.
Si vous utilisez git avec MSBuild, j'ai créé une cible qui copie tous les fichiers, puis 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 oeil ici: http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msbuild/
Je l'ai fait avec un code que je devais ajouter à mon référentiel et j'ai nettoyé avec -dfx pour pouvoir restaurer les fichiers.
J'ai essayé d'utiliser debugfs, look and link à partir d'inodes, de testdisk et de nombreux autres outils qui apparaissent et aucun n'a trouvé le répertoire que cette stupide écriture a effacée par accident.
Téléchargez extundelete de sourceforge.
Vous devrez probablement installer le paquet e2fslibs-dev
Courir
$ ./configure
$ make
Il va générer le binaire pour extundelete dans le dossier srcDans mon cas, j'ai effacé un dossier par erreur. appelons-le FOOBAR
Je viens de courir:
$ Sudo ./extundelete --restore-directory <full path to FOOBAR > <the partition>
et il a créé un dossier nommé RESTORED_FOLDERS