Korkarım bu komut satırlarından ilki çalışmadan koşulsuz olarak silinen git'in hazırlama alanındaki tüm dosyaları kopyalar. İkincisi, izlenen ancak şimdi silinmiş olan tüm dosyaların etiketlerini kaldırdı. Maalesef bu, bu dosyalarda taahhüt edilmeyen değişiklikleri kaybetmiş olacağınız anlamına gelir.
Çalışma kopyanızı ve dizininizi son işlemde nasıl olduklarına geri döndürmek istiyorsanız , aşağıdaki komutu ( dikkatlice ) kullanabilirsiniz:
git reset --hard
"Dikkatli" diyorum çünkü git reset --hard çalışma kopyanızdaki taahhüt edilmemiş değişiklikleri yok edecek ve endeksinizdeki . Bununla birlikte, bu durumda, son taahhüdünüzde devlete geri dönmek istiyormuşsunuz gibi geliyor ve taahhüt edilmemiş değişiklikler yine de kayboldu.
Güncelleme: Amber'in cevabı hakkındaki yorumlarınızdan henüz herhangi bir taahhüt oluşturmadığınız anlaşılıyor (HEAD çözülemediğinden), bu yüzden yardımcı olmaz, korkarım.
Bu boruların nasıl çalıştığına gelince: git ls-files -zve git diff --name-only --diff-filter=D -zher ikisi de baytla ayrılmış dosya adlarının bir listesini çıkarır 0. (Bu, faydalıdır, çünkü yeni satırların aksine 0, Unix benzeri sistemlerde dosya adlarında baytların oluşmaması garanti edilir.) Program xargs, varsayılan olarak standart girdiden satırlar alıp sonuna ekleyerek komut satırlarını standart girdisinden oluşturur . komut satırı. -0Seçenek ile ayrılmış tarafından standart giriş beklemek diyor 0bayt. xargskomut satırının hiçbir zaman çok uzun olmamasını sağlayarak, standart girdideki tüm parametreleri kullanmak için komutu birkaç kez çağırabilir.
Basit bir örnek olarak, test.txtşu içeriğe sahip adlı bir dosyanız varsa :
hello
goodbye
hello again
... sonra komut şu komutu xargs echo whatever < test.txtçağırır:
echo whatever hello goodbye hello again
rm -fgit komutu değildir ve bir--cachedseçeneği yoktur. Yürütülmeden önce yerel dosyalarınız silindi,git rmbu yüzdengit rmherhangi bir şey için meşru bir şekilde suçlayabileceğinizi düşünmüyorum .