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 -z
ve git diff --name-only --diff-filter=D -z
her 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ı. -0
Seçenek ile ayrılmış tarafından standart giriş beklemek diyor 0
bayt. xargs
komut 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 -f
git komutu değildir ve bir--cached
seçeneği yoktur. Yürütülmeden önce yerel dosyalarınız silindi,git rm
bu yüzdengit rm
herhangi bir şey için meşru bir şekilde suçlayabileceğinizi düşünmüyorum .