2010-07-03 17 views
22

git status çalıştırdığımda,Sil'deki tüm "silinmiş ancak güncellenmemiş" dosyaları silin

deleted: dir/file.js 

formunda bir grup satır var. git checkout -- dir/file.js ile bunların her birini ayrı ayrı kaldırabilirim, ancak bunu yapmak için daha az zahmetli bir yol olmalı. (Ve evet, ilk etapta git rm kullanmalıyım biliyorum ...)

[ Güncelleme: Mark aşağıda işaret ettiğinden, git checkout -- aslında silinmiş bir dosyayı geri yüklüyordu, ancak silinmiş olduğunu düşündüm git dizininden. Biraz şaşkınım, çünkü git status çalıştırdığınızda, diyor:

use "git checkout -- <file>..." to discard changes in working directory 

Bana göre, "değişiklikleri sil", "sildiğiniz bir dosyayı geri yüklemek" anlamına gelmez, ama git terminolojisinde bu mantıklıdır .]

+0

: olarak listelenen bu dosyalar "silinmiş". 'checkout' bu silinmiş dosyaları geri yükleyecektir, ancak dosyaların kaldırılacağı ilk yerde 'git rm' kullanılmalıdır. Bu dosyaları çalışan ağacınıza geri yüklemek mi yoksa çalışma ağacınızın yanı sıra dizinden kaldırmak mı istiyorsunuz? –

+0

Onları da dizinden kaldırmak istiyorum, hangi 'git checkout - [filename]', 'git checkout [filename]' 'dosyaları geri yükler. –

+0

Bu doğru değil, korkarım - 'git 'in' 'check-out - ' ''' un bir dalın ismi (ya da bir etiketin adı yerine bir yol olarak yorumlandığından emin olmanın bir yoludur. veya bir taahhüt). 'bir dalın (& c.) Adı değilse, bahsettiğiniz formların her ikisi de aynı etkiye sahiptir: dosyayı dizindeki durumuna geri yüklerler. –

cevap

36

kullanmak (örn sadece git rm dir/file.js senin durumunda.) Eğer çok ait varsa Ben ilk git ls-files --deleted bu dosyaların bir listesini ürettiğini kontrol edip, eğer öyleyse, onları silmek istiyorsunuz, altında "Değişti ama updated değil": anlamıyorum

git ls-files --deleted -z | xargs -0 git rm 
+0

Teşekkürler, bu mükemmel çalışıyor! Takma isminde olmak zorundayım. –

+0

Gerçekten faydalı! – cool

1

, sen silinmesini işlemek istiyorsun bu dosyalar? rampion işaret ettiği gibi Sonra yine zaten çalışma kopyasında silinen dosyaların silinmesini sahneye git rm kullanabilirsiniz

git add -u 
git commit 
+0

Silinmiş büyük bir dosyada asılı olan 'git push' ile ilgili bir sorunum var, yukarıdakilerin tümünü ve daha fazlasını takip ettim. Herhangi bir durum kayıtlarında gösterilmiyor. Ama hala bir itme üzerinde asılı. Cevabınız, daha sonra bir git rm ile devam ederse bunu düzeltir miydi? – elliotrock

34

ile son revizyon (silme dahil) tüm değiştirilen dosyaları geri yükleyebilirsiniz olabilir

+4

Bu doğru cevap – mko

+2

Sadece eklediğim cevabı neden tercih ettiğimi açıklığa kavuşturmak için, 'git add -u' ile ilgili sorun, yalnızca depoda değil, depodaki izlenen dosyalarda başka değişiklikler de olacak olmasıdır. silinmeler. –

+0

'Dialogik'ten Reddedilen Düzenleme:' (Bu, aynı zamanda, yalnızca silme işlemlerinden ziyade, depodaki izlenen dosyalardaki diğer değişiklikleri de gösterecektir - aşağıdaki yorumları görün.) –

İlgili konular