Git deposundaki silinen tüm dosyaları nasıl listeleyebilirim?


305

Git, dosyaların ne zaman silindiğine dair bilgileri depoladığını ve hangi dosyaların kaldırıldığını görmek için bireysel taahhütleri kontrol edebildiğimi biliyorum, ancak bir havuzun ömrü boyunca silinen her dosyanın bir listesini oluşturacak bir komut var mı?


Kimse bu cevap üzerine tökezleyerek ama bir diğerine karma veya şube işlemek sadece vb modifiye silinmiş, yeniden adlandırılmış eklenen dosyalar,,,, listesini görmek isteyen için, bu yapın: git diff --name-status commit_hash.
Gabriel Staples

Yanıtlar:


410
git log --diff-filter=D --summary

Bkz. Git deposunda silinmiş bir dosyayı bulma ve geri yükleme

Hangi taahhütlerin kaldırıldığına dair tüm bilgileri istemiyorsanız grep delete, oraya bir ekleyebilirsiniz .

git log --diff-filter=D --summary | grep delete

13
Uyarı: Bu, sildiğiniz tüm dosyaları listeler. Bir dosyayı sildiyseniz ve aynı ada sahip yeni bir dosya oluşturduysanız , orada mevcut bir dosya olmasına rağmen bu listede görünecektir .
TJ Crowder

24
Ayrıca git whatchanged komutuna da bakmalısınız . Oldukça havalı.
Mr.Black

6
Bu aynı zamanda isimleri de silme olarak listeler. Bu kullanımı atlamak içingit log --find-renames --diff-filter=D --summary | grep delete
Slaven Rezic

2
Git 2.9 ile yeniden ad tespiti varsayılan olarak etkindir. Bunları silerken tekrar görmek içingit log --no-renames --diff-filter=D --summary | grep delete
Michael Große

2
Kullanmaya dikkat edin grep deleteçünkü taahhüt mesajı silme kelimesine sahipse, o da alınacaktır. grep 'delete mode'Bunun yerine kullanın .
Vadim


37

Yalnızca şu anda silinmiş dosyaları görmek istiyorsanız, bunu kullanabilirsiniz:

git ls-files --deleted

daha sonra bunları kaldırmak istiyorsanız ("git rm" kullanarak silmediyseniz) xargs git rm

git ls-files --deleted | xargs git rm

11
Bu yalnızca dizindeki çalışma kopyasında silinmiş dosyaları gösterir. OP, silinmiş olan tüm dosyaları ister.
Max Nanasy

1
veyagit rm $(git ls-files --deleted)
yunzen

OP'nin istediği şey olmasa da, bir aramada
solstice333

10

Bu Yığın Taşması cevabına atıfta bulunuluyor .

Değişen her dosya için değişiklik türü (A: Eklendi, M: Değiştirildi, D: Silindi) almanın oldukça düzgün bir yoludur .

git diff --name-status

4

Ve sonuçları bir şekilde kısıtlamak istiyorsanız, güzel bir sonuç:

$ git log --diff-filter=D --summary | sed -n '/^commit/h;/\/some_dir\//{G;s/\ncommit \(.*\)/ \1/gp}'
delete mode 100644 blah/some_dir/file1 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file2 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file3 9c89b91d8df7c95c6043184154c476623414fcb7

some_dirİçinden taahhüt edilen numarayla birlikte tüm dosyaların silinmesini sağlar (sed komutuna bakın). Herhangi bir sed regex yapacak (silinen dosya türlerini bulmak için kullanıyorum vb.)


2
Günlük geliştirici hayatında yararlı olmanın karmaşık bir yolunun bu olduğuna inanıyorum. Bunun yerine, geçerli git log --diff-filter=D .
dizinden

Sahip olduğum durum, dizinin de kaldırılmış olması ve ismin yeni bir parçası olmasıydı.
estani

4

Windows'un bir grepkomutu olmadığından , bu benim için PowerShell'de çalıştı:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt

Nedir Select-String?
MarcusJ

1
Bu bir PowerShell cmdlet'i. Bkz. Docs.microsoft.com/en-us/powershell/module/…
James Skemp

Windows'un FIND ve FINDSTR var , ancak bunları hiç kullanmadığımı itiraf etmeliyim. Git Bash'i kurmak en kolay yoldur. Bir alternatif şişirilmiş Cygwin'dir .
Peter Mortensen

4

Silinen tüm dosyaları some_branch içinde göster

git diff origin/master...origin/some_branch --name-status | grep ^D

veya

git diff origin/master...origin/some_branch --name-status --diff-filter=D 

2
İçinde D olan tüm dosyaları içereceği için bu işe yaramaz. Sen gibi bir şey gerekir git diff origin/master...origin/some_branch --name-status | grep ^Dveyagit diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood

1

Bu, tüm dallarda silinmiş ve yollarına göre sıralanmış tüm dosyaların bir listesini alır:

git log --diff-filter=D --summary | grep "delete mode 100" | cut -c 21- | sort > deleted.txt

Msysgit (2.6.1.windows.1) içinde çalışır. Git dosyaları 100644 veya 100755 olarak işlenmiş olabileceğinden, "100 silme moduna" ihtiyacımız olduğunu unutmayın.

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.