Saya mengikuti instruksi membuat halaman github , dan lupa pindah ke sub direktori git saya. Akibatnya, saya baru saja memasukkan seluruh direktori dokumen dengan git clean -fdx
.
Adakah cara agar saya dapat membatalkan kesalahan besar ini?
119
git clean -fdx
tanpa peringatan bahwa pengoperasian itu sangat berbahaya. Saya bertanya-tanya berapa banyak orang yang secara tidak dapat ditarik kembali menghancurkan file mereka dengan saran yang tampaknya tidak bersalah ini.git clean
panggilan yang tidak disengaja . Selain itu, usahakan untuk keluar dari kebiasaan membersihkan tanpa memeriksa. Buat skrip Powershell atau Bash yang dapat dipanggil yang akan berjalangit clean -fdxn
dengan prompt konfirmasi sebelum Anda benar-benar menjalankan pembersihan yang sangat merusak.Jawaban:
Tidak. File-file itu hilang.
(Baru saja memeriksa di Linux: panggilan bersih git
unlink()
, dan tidak mencadangkan apa pun sebelumnya.)sumber
git clean
tidak sengaja menghapus perubahan yang disimpan di dalam.idea
folder tersembunyi dan Riwayat Lokal menyelamatkan saya!Akan melakukan dry run , dan menunjukkan kepada Anda file apa yang akan dihapus jika Anda menjalankan
(tentu saja ini hanya membantu jika Anda mengetahui hal ini sebelumnya, tetapi untuk waktu berikutnya)
sumber
-n
bekerja pada sebagian besar perintah git (dan banyak perintah * nix lainnya).IntelliJ / Android Studio memungkinkan pemulihan file dari riwayat lokal .
sumber
Tidak. "Git clean -fdx" akan menghapus semua file dan direktori yang tidak dilacak git dari direktori kerja Anda. Karena Git tidak melacak file-file ini, Git tidak akan memiliki backup dari file-file ini. Setidaknya tidak biasanya.
Jika Anda telah melakukan 'git add' pada salah satu file ini baru-baru ini (tetapi membatalkan komit), ada kemungkinan Anda dapat menemukannya dengan 'git fsck --lost-found'. Ini patut dicoba, tetapi jangan terlalu berharap terlalu banyak.
Di masa depan, Anda harus mempertimbangkan untuk melakukan beberapa kali terlalu sering daripada beberapa kali terlalu jarang. Dengan cara itu Anda setidaknya akan memiliki cadangan lokal, bahkan jika Anda tidak mendorong komit ini ke remote.
sumber
mkdir
-ingSeperti @kusma yang disebutkan di atas, jika Anda beruntung (jika Anda pernah melakukan "git add"), Anda dapat menggunakan perintah berikut untuk mengekstrak seluruh objek:
Dengan begitu, ia akan mencari semua jenis potongan, mengumpulkan seluruh perbedaan dan menambahkan ke file yang dapat Anda ekstrak file yang hilang. Dalam kasus saya, saya telah kehilangan seluruh kelas Java.
sumber
Jika Anda menggunakan Jetbrains IDE, ada opsi untuk melihat riwayat lokal suatu file. Jika Anda telah melakukannya
git clean
, Anda dapat membuat ulang file dan memeriksa riwayat lokal file dan memulihkannya dari sana.Bekerja untuk saya untuk satu file. Untuk direktori lengkap saya tidak tahu bagaimana melakukan itu.
sumber
Saya mengalami masalah ini hari ini.
Seperti yang dikatakan orang lain, git tidak menyimpan file.
Satu-satunya cara untuk membatalkan ini adalah dengan utilitas undelete. Saya menggunakan "extundelete" dan memulihkan semuanya, tetapi jarak tempuh / sistem file Anda mungkin berbeda-beda.
sumber
Jika Anda sedang mengerjakan Eclipse, salah satu solusi yang mungkin adalah memulihkan dari riwayat lokal Eclipse.
sumber
Sebenarnya Ya ! Ini mungkin! Tapi tanpa menggunakan perintah git.
Yang kita butuhkan hanyalah alat pemulihan file seperti Recuva .
Sebutkan saja jalur dari mana itu dihapus, dan biarkan memulihkan file.
Juga berikut adalah beberapa catatan berguna untuk menggunakan aplikasi itu:
Advanced Mode
->Options
->Actions
->Restore folder structure
Dengan ini semua file Anda akan dipulihkan dengan menjaga struktur folder sehingga akan jauh lebih mudah untuk hanya menyeret dan melepas folder itu ke jalur tempat folder itu dihapus.
Peringatan! Segera setelah Anda kehilangan (menghapus secara tidak sengaja) file apa pun, cobalah untuk tidak menyentuh (menambah / mengedit file) drive dari mana file itu dihapus untuk meningkatkan kemungkinan pemulihan yang berhasil. Jika tidak, Anda mungkin kehilangan file itu sepenuhnya.
Mengapa berhasil: Saat Anda menghapus file, sebenarnya file itu tidak terhapus. Ini hanya ditandai sebagai "dihapus" jadi lain kali ketika Anda menambahkan / memperbarui file ke drive yang sama, file lama itu ditimpa dengan yang baru. Tetapi sampai mereka ditimpa, masih mungkin untuk membaca (dan tentu saja memulihkan) file.
sumber
Saya melakukannya dengan kode yang seharusnya saya tambahkan ke repositori saya dan saya membersihkan dengan -dfx saya dapat memulihkan file.
Saya mencoba menggunakan debugfs, melihat dan menautkan dari inode, testdisk, dan banyak alat lain yang muncul dan tidak ada yang menemukan direktori yang tulisan bodoh ini terhapus secara tidak sengaja.
Unduh extundelete dari sourceforge.
Anda mungkin perlu menginstal paket e2fslibs-dev
Run
Ini akan menghasilkan biner untuk extundelete di dalam folder src Dalam kasus saya, saya telah salah menghapus folder. sebut saja FOOBAR
Saya baru saja berlari:
dan itu membuat folder bernama RESTORED_FOLDERS
sumber
Jika Anda menggunakan git dengan MSBuild saya membuat target yang menyalin semua file dan kemudian melakukannya
git clean -xdf
. Dengan cara ini Anda dapat dengan mudah mengembalikan file jika Anda menyadari bahwa Anda menghapus sesuatu yang tidak ingin Anda hapus. Lihat di sini: http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msbuild/sumber
Jika Anda menggunakan mac dan dicadangkan dengan
Time Machine
, maka Anda dapat memulihkansumber
Untungnya, saya membuat kesalahan ini saat menggunakan Windows 7. Pergi ke recycle bin, menyorot semua file yang terhapus dan mengklik "Restore". Selesai.
sumber
git clean
tidak memindahkan file ke recycle bin.Jika Anda belum mendorong perubahan Anda (git push), Anda juga dapat mengembalikan informasi dari server Anda yang belum diperbarui. Saya menggunakan filezilla untuk mengembalikan file yang saya hapus dan salin ke file lokal saya. Ini bukan cara terbaik melakukannya, tetapi bekerja dan menghindari penggunaan konsol
sumber