Bagaimana saya bisa mendaftar semua file yang dihapus di repositori Git?

306

Saya tahu Git menyimpan informasi tentang kapan file dihapus dan saya dapat memeriksa setiap komitmen untuk melihat file mana yang telah dihapus, tetapi adakah perintah yang akan menghasilkan daftar setiap file yang dihapus sepanjang umur repositori?

Toby
sumber
Bagi siapa saja tersandung atas jawaban ini, tapi hanya ingin melihat daftar file yang ditambahkan, diganti namanya, dihapus, dimodifikasi, dll, dari satu komit hash atau cabang ke cabang lain, melakukan hal ini: git diff --name-status commit_hash.
Gabriel Staples

Jawaban:

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

Lihat Menemukan dan mengembalikan file yang dihapus di repositori Git

Jika Anda tidak ingin semua informasi tentang komit mana mereka dihapus, Anda bisa menambahkannya grep deletedi sana.

git log --diff-filter=D --summary | grep delete
I82Much
sumber
13
Peringatan: Ini mencantumkan file yang telah Anda hapus. Jika Anda telah menghapus file, kemudian membuat file baru dengan nama yang sama, itu akan muncul di daftar ini, meskipun ada file yang masih ada di sana.
TJ Crowder
24
Anda juga harus melihat perintah git whatchanged . Cukup keren.
Mr.Black
6
Ini akan mencantumkan juga nama-nama sebagai dihapus. Untuk melewati penggunaan inigit log --find-renames --diff-filter=D --summary | grep delete
Slaven Rezic
2
Dengan git 2.9 deteksi nama diaktifkan secara default. Untuk melihatnya lagi sebagai penghapusan, gunakangit log --no-renames --diff-filter=D --summary | grep delete
Michael Große
2
Hati-hati menggunakan grep deletekarena jika pesan komit memiliki kata hapus, itu akan diambil juga. Gunakan grep 'delete mode'sebagai gantinya.
Vadim
85

Ini melakukan apa yang Anda inginkan, saya pikir:

git log --all --pretty=format: --name-only --diff-filter=D | sort -u

... yang baru saja saya ambil kurang lebih langsung dari jawaban lain ini .

Mark Longair
sumber
37

Jika Anda hanya tertarik melihat file yang saat ini dihapus, Anda dapat menggunakan ini:

git ls-files --deleted

jika Anda kemudian ingin menghapusnya (jika Anda menghapusnya tidak menggunakan "git rm") pipa yang menghasilkan xargs git rm

git ls-files --deleted | xargs git rm
Jim Clouse
sumber
11
Ini hanya menunjukkan file dalam indeks yang telah dihapus dalam copy pekerjaan. OP menginginkan semua file yang pernah dihapus.
Max Nanasy
1
ataugit rm $(git ls-files --deleted)
yunzen
meskipun bukan itu yang diinginkan OP, ini masih berguna setidaknya untuk diri saya sendiri, karena saya kesulitan mengutarakan pertanyaan saya dengan benar dalam pencarian
solstice333
10

Mengutip ini jawaban Stack Overflow.

Ini adalah cara yang cukup rapi untuk mendapatkan tipe perubahan (A: Ditambahkan, M: Dimodifikasi, D: Dihapus) untuk setiap file yang diubah.

git diff --name-status
akshay
sumber
4

Dan jika Anda ingin membatasi hasilnya, inilah yang bagus:

$ 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

Anda akan mendapatkan semua file dihapus dari some_dir(lihat perintah sed) bersama dengan nomor komit di mana itu terjadi. Setiap regex akan melakukan (Saya menggunakan ini untuk menemukan jenis file yang dihapus, dll)

estani
sumber
2
Saya percaya itu cara rumit untuk berguna dalam kehidupan pengembang sehari-hari. Sebagai gantinya, jika Anda ingin membuat daftar file yang dihapus dari direktori saat ini, cukup lakukan:git log --diff-filter=D .
Sebi
Kasus yang saya miliki adalah bahwa direktori itu juga dihapus dan saya hanya bagian baru dari namanya.
estani
4

Karena Windows tidak memiliki grepperintah, ini berfungsi untuk saya di PowerShell:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt
James Skemp
sumber
Apa Select-String?
MarcusJ
1
Ini adalah cmdlet PowerShell. Lihat docs.microsoft.com/en-us/powershell/module/…
James Skemp
Windows memiliki FIND dan FINDSTR , meskipun saya harus mengakui bahwa saya belum pernah menggunakannya. Menginstal Git Bash adalah cara termudah. Alternatifnya adalah Cygwin yang kembung .
Peter Mortensen
4

Tampilkan semua file yang dihapus di some_branch

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

atau

git diff origin/master...origin/some_branch --name-status --diff-filter=D 
vix2
sumber
2
Ini tidak akan berhasil karena akan berisi semua file dengan D di dalamnya. Anda memerlukan sesuatu seperti git diff origin/master...origin/some_branch --name-status | grep ^Dataugit diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood
1

Ini akan memberi Anda daftar semua file yang dihapus di semua cabang, diurutkan berdasarkan jalurnya:

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

Bekerja di msysgit (2.6.1.windows.1). Catatan kita perlu "hapus mode 100" karena file git mungkin telah dikomit sebagai mode 100644 atau 100755.

Mr_and_Mrs_D
sumber