Silinen dosyaları geri yükleyebilir miyim (bir `git clean -fdx` geri alabilir miyim)?


119

Github sayfalarının yapımıyla ilgili talimatları izliyordum ve git alt dizinime gitmeyi unuttum. Sonuç olarak, ile tüm bir belge dizinini bombaladım git clean -fdx.
Bu korkunç hatayı geri almamın bir yolu var mı?


2
Emin değilim ama git ile mümkün olduğunu sanmıyorum. Bununla birlikte, dosya sisteminiz için bir geri alma yardımcı programı hile yapabilir.
static_rtti

9
İlginç bir şekilde Git Topluluk Kitabıgit clean -fdx , operasyonun çok tehlikeli olduğunu da hiçbir uyarıda bulunmaksızın öneriyor . Bu masum görünen öneriyle kaç kişinin dosyalarını geri dönülmez bir şekilde yok ettiğini merak ediyorum.
catpnosis

5
IDE'nizin Eclipse veya IntelliJ IDE'ler gibi bir "Yerel Geçmiş" olup olmadığını kontrol ettiğinizden emin olun. Bu, yanlışlıkla git cleanyapılan aramalarda sizi birçok gönül yarasından kurtarabilir . Ayrıca kontrol etmeden temizlik alışkanlığından çıkmaya çalışın. git clean -fdxnGerçekten inanılmaz derecede yıkıcı temizliği çalıştırmadan önce bir onay istemi ile çalışacak çağrılabilecek bir Powershell veya Bash betiği oluşturun .
Josh Burgess

Yanıtlar:


129

Hayır. O dosyalar gitmiş.

(Sadece Linux'ta kontrol edildi: git clean çağrılarunlink() ve önceden hiçbir şey yedeklemez.)


32
RubyMine, Eclipse vb. Gibi gelişmiş bir IDE kullanıyorsanız, büyük olasılıkla silinen dosyaların yerel bir geçmişine sahip olur ve bunları kurtarmanız mümkün olabilir.
Usman

1
@Usman benim durumumda gizli klasördeki git cleanraflı değişiklikleri yanlışlıkla silmiş .ideave Yerel Geçmiş beni kurtardı!
emkman

2
@ Usman'dan harika bir ipucu. Eclipse ile, dosyamı "Yerel Geçmişten Geri Yükle ..." seçeneğiyle geri alabilirim: i.imgur.com/XWNLOk5.gifv
brandizzi

1
Aslında bu MÜMKÜN ama hacky yöntemiyle. Bu yanıta bakın: stackoverflow.com/questions/6267180/can-i-undo-a-git-clean-fdx/…
Just Shadow

4
PyCharm'da da onları geri yükleyebilirsiniz. Onları içeren klasöre sağ tıklayın, Yerel geçmişe tıklayın, silme işlemini bulun ve geri al'a tıklayın.
Juanjo Conti



18

Hayır. "Git clean -fdx" git'in izlemediği tüm dosyaları ve dizinleri çalışma dizininizden silecektir. Git bu dosyaları takip etmediğinden, bu dosyaların yedeklerini almayacaktır. En azından genellikle değil.

Nispeten yakın zamanda bu dosyalardan birinde bir 'git add' yaptıysanız (ancak kaydetmeyi iptal ettiyseniz), onu 'git fsck --lost-found' ile bulma şansınız vardır. Denemeye değer, ama çok fazla umutlanmayın.

Gelecekte, birkaç kez çok nadiren yerine birkaç kez çok sık taahhüt vermeyi düşünmelisiniz. Bu şekilde, bu taahhütleri bir uzaktan kumandaya zorlamasanız bile, en azından yerel bir yedeğiniz olacak.


Asıl sorun, dizinin aynı zamanda bir depo olmamasıydı. Günlüğe geri döndüğümde, yeni depo dizinine mkdir-ing yaptıktan sonra cd yapmayı unuttuğum ortaya çıkıyor
Eric

1
Bu soruyu okuduktan kısa bir süre sonra Git'e, silinen her dosyayı yedeklemek için bir yapılandırma değişkeni ekleyen bir yama yazdım. Belki başkaları için yararlı olabilir? github.com/kusma/git/tree/work/clean-backup
kusma

1
Bugün şanslıydım !!! "Git fsck --lost-found" sayesinde. TÜM değişiklikleri almak için aşağıdakileri kullandım: git fsck | awk '{print $ 3}' | xargs git gösterisi | tee searchresults.log Eklediğim ve sonra kaldırdığım dosyanın tamamını istediğimden, günlükten alabiliyordum. :)
Marcello de Sales

11

@Kusma yukarıda belirtildiği gibi, eğer şanslıysanız (daha önce "git add" yaptıysanız), tüm nesneyi çıkarmak için aşağıdakileri kullanabilirsiniz:

git fsck | awk '{print $3}' | xargs git show | tee searchresults.log

Bu şekilde, tüm yığın türlerini arayacak, tüm farkları toplayacak ve kayıp dosyayı çıkarabileceğiniz bir dosyaya ekleyecektir. Benim durumumda, bütün bir Java sınıfını kaybettim.


8

Herhangi bir Jetbrains IDE kullanıyorsanız, bir dosyanın yerel geçmişini görme seçeneği vardır. Yaptıysangit clean , dosyayı yeniden ve dosyanın yerel geçmişini kontrol ve oradan geri yükleyebilirsiniz.

Benim için tek bir dosya için çalıştı. Tam bir dizin için bunu nasıl yapacağım konusunda hiçbir fikrim yok.


Dosyayı aynı dosya adıyla aynı konumda oluşturun. IDE'de sağ tıklayın ve "Geçmişi göster" seçeneğini tıklayın. İçeriği kopyalayıp yapıştırın. Mükemmel tavsiye @ Rajesh. Teşekkürler.
derin

1
Kurtarıldım. Teşekkür ederim.
Scott

Dosya içeriğini kopyalamaya gerek yok, dosyayı sağ tıklayın ve o sürüme geri yüklemek için 'geri dön'ü tıklayın (
silseniz

7

Bugün bu problemi yaşadım.

Başkalarının dediği gibi, git dosyaları saklamaz.

Bunu geri almanın tek yolu bir geri alma yardımcı programı kullanmaktır. "Extundelete" kullandım ve her şeyi kurtardım, ancak kilometreniz / dosya sisteminiz değişebilir.


7

Eclipse üzerinde çalışıyorsanız, olası çözümlerden biri, Eclipse'in yerel geçmişinden geri yüklemektir.


2
PyCharm kullanıyorum ve yerel tarih beni kurtardı
psychok7

1
IntelliJ IDEA'da da aynı şey!
arthurakay

RubyMine ayrıca yerel geçmişe sahiptir. beni kurtardı!
Usman

Tüm IntelliJ tarayıcılarının yerel bir geçmişi vardır. Neyse. WebStorm kullanıyordum ve bunu bulmadan hemen önce bir anevrizma geçirdim. 3 gün değerinde 12 saatlik çalışma günü geçti ve masamda bir şişe sert likörü yutmayı ciddi olarak düşündüm.
Josh Burgess

7

Aslında evet ! Bu mümkün! Ancak git komutlarını kullanmadan.
Tek ihtiyacımız olan sadece Recuva gibi bir dosya kurtarma aracı .
Sadece silindiği yerden bahsedin ve dosyaları kurtarmasına izin verin.

Ayrıca, bu uygulamayı kullanmak için bazı yararlı notlar:

  1. Dosyaları geri yüklemeden önce bu onay kutusunu işaretlemenizi şiddetle tavsiye ederim (silinen dosyalar kurtarma penceresinde göründüğünde):
    Advanced Mode-> Options-> Actions->Restore folder structure
    Bununla, tüm dosyalarınız klasör yapısını koruyarak kurtarılacak ve böylece çok daha kolay olacak sadece o klasörü silindiği yola sürükleyip bırakmak.
  2. Kurtarma aracını USB cihazına yüklemek çok tercih edilir (aşağıdaki uyarı nedeniyle)
  3. Dosyaları nereye geri yükleyeceğinizden bahsederken , şu anda kurtarılan dosya henüz kurtarılmamış diğer silinmiş dosyanın üzerine yazabileceğinden, silinen dosyaların bulunduğu yerden (yine aşağıda belirtilen uyarı nedeniyle) aynı sürücüyü seçmekten kaçının . Dosyaları herhangi bir USB sürücüsüne kurtarmak, orada her zaman iyi bir çözümdür.

Uyarı!Herhangi bir dosyayı kaybettiğinizde (yanlışlıkla sildiğinizde), başarılı kurtarma olasılığını artırmak için, silindiği yerden sürücüye dokunmamaya (dosya eklemeye / düzenlemeye) çalışın. Aksi takdirde o dosyayı tamamen kaybedebilirsiniz.

Neden çalışıyor: Bir dosyayı sildiğinizde, aslında silinmez. Yalnızca "silinmiş" olarak işaretlendiğinden, bir dahaki sefere aynı sürücüye dosya eklediğinizde / güncellediğinizde, bu eski dosyaların üzerine yenileri yazılır. Ancak, üzerine yazılıncaya kadar dosyaları okumak (ve tabii ki kurtarmak) hala mümkündür.


1
Teşekkürler hayatımı kurtardın Doğru cevap mı bilmiyorum çünkü her şeyi kurtaramadım ama ihtiyacım olan en kritik dosyaları aldığım için şanslıydım.
XzaR

2

Depoma eklemem gereken bir kodla yaptım ve -dfx ile temizledim, dosyaları geri yükleyebilirdim.

Hata ayıklama, inode, testdisk ve görünen diğer birçok araçtan bakmayı ve bağlantı kurmayı denedim ve hiçbiri bu aptalca yazının kazara sildiği dizini bulamadı.

Extundelete'i sourceforge'dan indirin .
Muhtemelen e2fslibs-dev paketini
çalıştırmanız gerekecek

$ ./configure 
$ make 

Src klasörü içinde extundelete için ikili oluşturacak Benim durumumda, bir klasörü yanlış bir şekilde sildim. ona FOOBAR diyelim

Sadece koştum:

$  sudo ./extundelete --restore-directory <full path to FOOBAR > <the partition> 


ve RESTORED_FOLDERS adında bir klasör oluşturdu


Vaov! bu, istediğim dosyayı kurtarmasa da, not alacağım bir şey - kesinlikle kullanışlı olacak!
vyom


1

Mac kullanıyorsanız ve bir ile yedeklediyseniz Time Machine, geri yükleyebilirsiniz.


0

Neyse ki, Windows 7'yi kullanırken bu hatayı yaptım. Geri dönüşüm kutusuna gittim, silinen tüm dosyaları vurguladım ve "Geri Yükle" yi tıkladım. Bitti.


6
Ne demek istiyorsun? git cleandosyaları geri dönüşüm kutusuna taşımaz.
MEMark

0

Değişikliklerinizi zorlamadıysanız (git push), sunucunuzdan henüz güncellenmemiş bilgileri de geri getirebilirsiniz. Sildiğim dosyaları geri getirmek için filezilla kullandım ve bunları yerel dosyalarıma kopyaladım. Bunu yapmanın en iyi yolu değil, ancak işe yarıyor ve konsol kullanmaktan kaçınıyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.