Menghapus beberapa file dari repositori Git yang sudah dihapus dari disk

Saya memiliki repo Git yang saya hapus empat file dengan rm ( bukan git rm ), dan status Git saya terlihat seperti ini:

 # deleted: file1.txt # deleted: file2.txt # deleted: file3.txt # deleted: file4.txt 

Cara menghapus file-file ini dari Git tanpa harus secara manual dan menambahkan setiap file sebagai berikut:

 git rm file1 file2 file3 file4 

Idealnya, saya mencari sesuatu yang berfungsi seperti git add . jika memungkinkan.

1246
29 янв. Codebeef diatur pada 29 Jan 2009-01-29 20:18 '09 pada 20:18 2009-01-29 20:18
@ 29 jawaban

Untuk Git 1.x

 $ git add -u 

Ini berarti bahwa Git secara otomatis melacak file, termasuk menghapus file yang sebelumnya dilacak.

Untuk git 2.0

Untuk membangun semua pohon kerja:

 $ git add -u :/ 

Untuk menjalankan hanya jalur saat ini:

 $ git add -u . 
2232
10 сент. balasan diberikan oleh carl 10 Sep 2009-09-10 03:13 '09 pada 3:13 pada 2009-09-10 03:13
 git ls-files --deleted -z | xargs -0 git rm 

mungkin apa yang Anda cari .. apakah itu bekerja untuk saya ..

1339
28 февр. Balas diberikan oleh Varinder pada 28 Feb 2011-02-28 23:21 '11 pada 11:21 malam 2011-02-28 23:21

Anda bisa menggunakannya

 git add -u 

Untuk menambahkan file yang dihapus ke area pementasan, lalu salin

 git commit -m "Deleted files manually" 
726
29 янв. Balas diberikan oleh Cody Caughlan pada 29 Jan 2009-01-29 20:25 '09 pada 20:25 2009-01-29 20:25

Jika Anda hanya menjalankan:

 git add -u 

git akan memperbarui indeksnya untuk mengetahui bahwa file yang Anda hapus sebenarnya harus menjadi bagian dari komit berikutnya. Kemudian Anda dapat menjalankan "git commit" untuk memverifikasi perubahan ini.

Atau, jika Anda menjalankan:

 git commit -a 

Dia akan secara otomatis menerima perubahan ini (dan yang lainnya) dan memperbaikinya.

Perbarui Jika Anda hanya ingin menambahkan file yang dihapus, coba:

 git ls-files --deleted -z | xargs -0 git rm git commit 
354
10 сент. Jawabannya diberikan oleh Emil Sit 10 Sep. 2009-09-10 03:15 '09 jam 3:15 2009-09-10 03:15

Anda mungkin mencari -A:

 git add -A 

ini mirip dengan git add -u, tetapi juga menambahkan file baru. Ini kira-kira setara dengan addremove hg (meskipun deteksi gerakan otomatis).

163
29 янв. Jawabannya diberikan oleh Dustin pada 29 Januari. 2009-01-29 21:10 '09 jam 9:10 malam 2009-01-29 21:10

Untuk hanya menyiapkan file yang dihapus:

 for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done 

Atau (metode xargs):

 git status | awk '/deleted/ {print $2}' | xargs git rm 

Anda dapat menggunakan alias dari set perintah yang disukai untuk penggunaan selanjutnya yang nyaman.

92
26 нояб. jawabannya diberikan Saeb Amini 26 Nov. 2011-11-26 13:34 '11 pada 13:34 2011-11-26 13:34
 git rm test.txt 

Sebelum atau sesudah menghapus file yang sebenarnya.

60
10 сент. Balas Peaker 10 Sep 2009-09-10 03:13 '09 pada 3:13 pada 2009-09-10 03:13

Menggunakan git -add dengan parameter '--all' atau '--update', Anda bisa mendapatkan lebih dari yang Anda inginkan. File baru dan / atau yang dimodifikasi juga akan ditambahkan ke indeks. Saya memiliki pengaturan alias bash ketika saya ingin menghapus file yang dihapus dari git tanpa menyentuh file lain:

 alias grma='git ls-files --deleted -z | xargs -0 git rm' 

Semua file yang telah dihapus dari sistem file ditambahkan ke indeks sebagai dihapus.

48
31 янв. jawabannya diberikan zobie 31 Jan 2009-01-31 07:50 '09 jam 7:50 pagi 2009-01-31 07:50

Bukan berarti itu penting, tapi saya tidak setuju dengan jawaban yang dipilih:

 git add -u 

... akan menghapus file dari indeks jika file yang sesuai di pohon kerja telah dihapus, tetapi juga akan dikenakan konten baru yang dimodifikasi dari file yang dipantau.

 git rm $(git ls-files --deleted) 

... di sisi lain hanya akan ada file yang dihapus rm yang dilacak.

Jadi yang terakhir, menurut saya, pilihan terbaik.

38
09 апр. Balas diberikan oleh Stephan Tual 09 Apr 2012-04-09 14:24 '12 pada 14:24 2012-04-09 14:24

Jika ini adalah satu-satunya perubahan yang bisa Anda lakukan

 git commit -a 

untuk melakukan semua perubahan. Ini akan termasuk file yang dihapus.

28
29 янв. jawabannya diberikan oleh SpoonMeiser 29 Jan 2009-01-29 20:29 '09 pada 20:29 2009-01-29 20:29
 git ls-files --deleted | xargs git rm 

- Opsi terbaik untuk menambahkan hanya file yang dihapus.

Berikut ini beberapa opsi lain.

 git add . => Add all (tracked and modified)/new files in the working tree. git add -u => Add all modified/removed files which are tracked. git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree. git commit -a -m "commit message" - Add and commit modified/removed files which are tracked. 
19
01 окт. Balas diberikan oleh Sijo Kurian 01 Okt 2012-10-01 22:36 '12 pada jam 10:36 2012-10-01 22:36

git add -u

-u --Perbarui hanya cocok dengan file yang sudah dilacak dalam indeks, bukan pohon yang bekerja. Ini berarti bahwa ia tidak akan pernah membuat file baru, tetapi konten baru dari file yang dipantau akan diubah dan itu akan menghapus file dari indeks jika file yang sesuai di pohon kerja telah dihapus.

Jika tidak, standarnya adalah "."; dengan kata lain, perbarui semua file yang dipantau di direktori saat ini dan subdirektori.

15
26 авг. jawabannya diberikan Obay 26 Agustus. 2014-08-26 15:24 '14 pada 15:24 2014-08-26 15:24

Solusi sederhana ini sangat bagus untuk saya:

 git rm $(git ls-files --deleted) 
14
06 нояб. Jawabannya diberikan oleh Husam Bdr 06 Nov. 2015-11-06 16:32 '15 pada 16:32 2015-11-06 16:32

Jika Anda ingin menambahkannya ke .gitconfig Anda, ikuti >

 [alias] rma = !git ls-files --deleted -z | xargs -0 git rm 

Maka yang harus Anda lakukan adalah menjalankan:

 git rma 
10
25 июля '12 в 23:47 2012-07-25 23:47 jawabannya diberikan oleh Evan Moran pada 25 Juli '12 pada 23:47 2012-07-25 23:47
 git ls-files --deleted -z | xargs -0 git rm --cached 

Ini akan menghapus semua file yang dihapus yang sebelumnya dilacak menggunakan git, dan juga menangani case ketika ada spasi di nama Anda.

Bergantung pada versi POSIX Anda, Anda mungkin perlu menggunakan xargs -0 -r : ini akan menyebabkan xargs keluar dengan anggun dengan nol konten.

EDIT: --deleted --cached dan --deleted digunakan bersama-sama untuk melindungi dari penghapusan file yang belum terhapus secara tidak sengaja.

8
04 янв. Jawabannya diberikan Murphy Danger 04 Jan. 2014-01-04 23:34 '14 pada 23:34 2014-01-04 23:34

Cobalah.

 -a --all Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected. git add .  git commit -m -a "Your commit" 

atau

 git add --all  git commit -m "Your commit" 
6
09 марта '15 в 18:05 2015-03-09 18:05 jawabannya diberikan ilgam 09 Maret '15 pukul 18:05 2015-03-09 18:05

Silakan gunakan -t untuk melihat perintah mana yang benar-benar berjalan.

Saya baru saja mengubah jawaban Wyrder untuk melakukan hal yang sama:

 git ls-files --deleted -z | xargs -t -0 git rm 
6
17 апр. Balas diberikan oleh Venkateswara Rao pada 17 Apr 2016-04-17 18:00 '16 jam 6 sore 2016-04-17 18:00

Berikut ini akan berfungsi walaupun Anda memiliki banyak file untuk diproses:

 git ls-files --deleted | xargs git rm 

Anda mungkin juga ingin memberikan komentar.

Lihat lebih banyak di: Skrip Git yang berguna

5
24 мая '13 в 16:45 2013-05-24 16:45 jawabannya diberikan l3x 24 Mei '13 pada 16:45 2013-05-24 16:45

Tidak ada flag di git -add yang hanya akan menghapus file yang dihapus; jika semua yang Anda ubah adalah file yang dihapus, maka Anda baik-baik saja, tetapi jika tidak, Anda perlu menjalankan git -status dan menganalisis hasilnya.

Mengerjakan jawaban untuk Jeremy, itulah yang saya dapat:

 git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm 
  • Dapatkan status file.
  • Untuk file yang dihapus, sorot nama file.
  • Hapus semua baris yang dimulai dengan C #, serta bilah status dengan kata "dihapus"; Saya tidak ingat apa itu sebenarnya, dan tidak ada lagi, jadi Anda mungkin perlu mengubahnya untuk situasi yang berbeda. Saya pikir pengelompokan ekspresi mungkin spesifik untuk GNU, jadi jika Anda tidak menggunakan gnutil, Anda mungkin perlu menambahkan beberapa baris grep -v .
  • Transfer file ke git rm .

Rekatkan ini ke dalam shell alias ...

5
26 июля '09 в 2:41 2009-07-26 02:41 jawabannya diberikan oleh Xiong Chiamiov pada 26 Juli '09 pukul 02:41 2009-07-26 02:41

Seperti disebutkan

 git add -u 

menghapus file yang dihapus untuk dihapus, TETAPI JUGA file yang dimodifikasi untuk memperbarui.

Untuk menonaktifkan file yang diubah, Anda bisa

 git reset HEAD <path> 

jika Anda ingin komitmen Anda teratur dan bersih.
CATATAN: Ini juga dapat menghapus file yang dihapus, jadi berhati-hatilah dengan wildcard ini.

4
21 февр. jawabannya diberikan DarkNeuron 21 Feb. 2012-02-21 21:43 '12 pada 21:43 2012-02-21 21:43
 git commit -m 'commit msg' $(git ls-files --deleted) 

Ini bekerja untuk saya setelah saya menghapus file.

4
05 авг. jawabannya diberikan Chad 05 Agustus. 2014-08-05 17:40 '14 pada 17:40 2014-08-05 17:40

Saya membutuhkan hal yang sama dan menggunakan tombol git gui "perubahan yang diubah". dia juga menambahkan segalanya.

Dan setelah "perubahan panggung" saya membuat "komit" ...

jadi direktori kerja saya dihapus lagi.

3
15 нояб. jawabannya diberikan oleh Serdar pada 15 November. 2011-11-15 17:29 '11 pada 17:29 2011-11-15 17:29

Anda dapat menggunakan git add -u <filenames> untuk menempatkan hanya file yang dihapus.

Sebagai contoh, jika Anda menghapus templates/*.tpl file, gunakan git add -u templates/*.tpl .

-u diperlukan untuk mengakses file yang ada di repositori tetapi tidak ada lagi di direktori kerja. Jika tidak, secara default git add akan mencari file di direktori kerja, dan jika Anda menentukan file yang Anda hapus di sana, mereka tidak akan menemukannya.

2
07 марта '13 в 4:29 2013-03-07 04:29 jawabannya diberikan oleh thomasrutter 07 Maret '13 di 4:29 2013-03-07 04:29

(Perubahan lain)

Saya ingin menghapus semua yang sudah dihapus dari file disk, tetapi dari satu folder tertentu, membiarkan folder lain tetap utuh. Berikut ini bekerja untuk saya:

 git ls-files --deleted | grep <folder-name> | xargs git rm 
1
23 нояб. balasan diberikan urban 23 November 2016-11-23 13:32 '16 pada jam 1:32 siang 2016-11-23 13:32

sesuatu seperti

 git status | sed -s "s/^.*deleted: //" | xargs git rm 

dapat melakukannya.

1
29 янв. Jeremy French menjawab 29 Jan 2009-01-29 20:28 '09 pada 20:28 2009-01-29 20:28

Menambahkan alias sistem untuk menempatkan file yang dihapus sebagai rm-all

UNIX alias rm-all='git rm $(git ls-files --deleted)'

WINDOWS doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

Catatan

Windows harus sudah menginstal bash .

1
19 февр. Jawabannya diberikan oleh Haris Krajina pada 19 Februari. 2014-02-19 15:16 '14 pada 15:16 2014-02-19 15:16

Untuk proyek studio visual

 'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

yang berguna ketika path file jarak jauh memiliki ruang

0
04 февр. Balas diberikan oleh Sawyer pada 04 Februari. 2014-02-04 18:34 '14 pada 18:34 2014-02-04 18:34
 git rm $(git ls-files -d) 

Menghapus semua file yang terdaftar oleh git ls-files (-d hanya menampilkan file yang dihapus). Tidak berfungsi untuk file dengan spasi di nama file atau path, tapi ingat saja

0
10 дек. jawaban yang diberikan A. Albershteyn 10 Des. 2018-12-10 11:19 '18 jam 11:19. 2018-12-10 11:19

Solusi paling fleksibel yang saya temukan sampai saat ini adalah

 git cola 

Dan pilih semua file yang dihapus yang ingin saya jalankan.

(Catatan. Saya biasanya melakukan semua baris perintah di git, tetapi git menangani file yang dihapus agak canggung).

-1
03 окт. Jawaban diberikan oleh Broes De Cat pada 03 Oktober. 2012-10-03 17:28 '12 pada 17:28 2012-10-03 17:28

Pertanyaan lain tentang tag atau Ajukan Pertanyaan