Saya memiliki repo Git yang telah saya hapus empat file dari menggunakan rm
( tidak git rm
), dan status Git saya terlihat seperti ini:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
Bagaimana cara menghapus file-file ini dari Git tanpa harus melalui secara manual dan menambahkan setiap file seperti ini:
git rm file1 file2 file3 file4
Idealnya, saya mencari sesuatu yang berfungsi dengan cara yang git add .
sama, jika itu mungkin.
git
git-commit
git-add
git-rm
Codebeef
sumber
sumber
git rm
, penghapusan bisa saja dari alat terpisah, IDE atau file manager. Visual Studio untuk satu orang bisa terasa sakit ketika menghapus / mengganti nama file.git rm
sama seperti menanyakan mengapa mereka tidak menggunakangit vim
ataugit cd
. Ini hal yang bodoh untuk dilakukan, dan git harus memiliki perintah bawaan atau alias untuk menghapus file yang dihapus dari pementasan, dan Anda tidak harus mencarinya di SO atau membaca halaman manual saat istirahat makan siang Anda.Jawaban:
Untuk Git 1.x
Ini memberitahu git untuk secara otomatis mengatur file yang dilacak - termasuk menghapus file yang sebelumnya dilacak.
Untuk Git 2.0
Untuk menggelar seluruh pohon kerja Anda:
Untuk menampilkan hanya jalur saat ini:
sumber
git add -u folder/
untuk menjalankan operasi ini dalam foldermungkin apa yang Anda cari .. itu bekerja untuk saya ..
sumber
git ls-files --deleted -z | xargs -0 git rm
Kamu bisa menggunakan
Untuk menambahkan file yang dihapus ke area pementasan, kemudian komit
sumber
Jika Anda hanya menjalankan:
git akan memperbarui indeksnya untuk mengetahui bahwa file yang telah Anda hapus sebenarnya harus menjadi bagian dari komit berikutnya. Kemudian Anda dapat menjalankan "git commit" untuk memeriksa perubahan itu.
Atau, jika Anda menjalankan:
Secara otomatis akan mengambil perubahan ini (dan yang lainnya) dan mengkomitnya.
Pembaruan : Jika Anda hanya ingin menambahkan file yang dihapus, coba:
sumber
git commit -a
akan melakukan apa yang saya inginkan, kecuali dalam beberapa kasus saya memiliki file yang saya tidak ingin komit, jadi saya ingin menyiapkan komit secara manual.Anda mungkin mencari -A:
ini mirip dengan git add -u, tetapi juga menambahkan file baru. Ini kira-kira setara dengan
addremove
perintah hg (meskipun deteksi gerakan otomatis).sumber
Untuk tahap hanya dihapus file:
Atau (cara xargs):
Anda dapat alias mengatur perintah pilihan Anda untuk penggunaan yang nyaman di kemudian hari.
sumber
xargs
sekitar 15 menit untuk dikuasai.git status | awk '/deleted/ {print $3}' | xargs git rm
akan menjadi cara yang lebih singkat untuk melakukan itu.grep | awk
... Katakan Saja No.git rm $(git ls-files --deleted)
bukankah ini lebih nyaman (disalin dari ini ).git ls-files --deleted | while read f; do git rm $f; done
xargs
mungkin lebih efisien daripada loop sementara untuk daftar besar, karena melewati lebih dari satu argumen setiap kali dijalankangit rm
. Untuk membatasi jumlah argumen yang diteruskan kegit rm
setiap kali dieksekusi, gunakan-n
opsi:git ls-files --deleted | xargs -n 15 git rm
Sebelum atau setelah Anda menghapus file yang sebenarnya.
sumber
rm
dan menyesalinya nanti.git add -u
? Sepertinya akan lebih aman untuk menambahkan file tertentu yang dihapus ke komit, daripada menambahkan SEMUA perubahan.Dengan menggunakan git-add dengan opsi '--all' atau '--update' Anda mungkin mendapatkan lebih dari yang Anda inginkan. File baru dan / atau yang dimodifikasi juga akan ditambahkan ke indeks. Saya memiliki setup alias bash ketika saya ingin menghapus file yang dihapus dari git tanpa menyentuh file lain:
Semua file yang telah dihapus dari sistem file ditambahkan ke indeks sebagai dihapus.
sumber
Bukan berarti itu penting, tetapi saya tidak setuju dengan jawaban yang dipilih:
... akan menghapus file dari indeks jika file yang sesuai di pohon kerja telah dihapus, tetapi itu juga akan menggubah konten baru yang dimodifikasi dari file yang dilacak.
... di sisi lain hanya akan rm file yang dihapus yang dilacak.
Jadi yang terakhir dalam pandangan saya adalah opsi yang lebih baik.
sumber
Jika itu adalah satu-satunya perubahan, Anda bisa melakukannya
untuk melakukan semua perubahan. Itu akan termasuk file yang dihapus.
sumber
adalah opsi terbaik untuk menambahkan hanya file yang dihapus.
Berikut ini beberapa opsi lain.
sumber
git add -u
-u --perbarui Hanya cocok dengan file yang sudah dilacak di indeks daripada pohon yang bekerja. Itu berarti bahwa ia tidak akan pernah mem-stage file baru, tetapi itu akan stage memodifikasi konten baru dari file yang dilacak dan bahwa itu akan menghapus file dari indeks jika file yang sesuai di pohon kerja telah dihapus.
Jika tidak diberikan, default ke "."; dengan kata lain, perbarui semua file yang dilacak di direktori saat ini dan subdirektori.
sumber
git add -u
. Dari mana semua hal lain dalam jawaban Anda berasal, dokumentasi? Anda harus menautkan ke dokumentasi dan memblokirnya jika ada.Solusi sederhana itu berfungsi baik untuk saya:
sumber
Jika Anda ingin menambahkannya ke Anda
.gitconfig
lakukan ini:Maka yang harus Anda lakukan adalah menjalankan:
sumber
git config --global alias.rmd '!git ls-files --deleted -z | xargs -0 git rm'
Ini akan menghapus semua file yang dihapus yang sebelumnya dilacak oleh git, serta menangani kasus di mana nama file Anda memiliki ruang di dalamnya.
Bergantung pada varian POSIX Anda, Anda mungkin perlu menggunakan
xargs -0 -r
: ini akan menyebabkanxargs
keluar dengan anggun ketika mengirim konten kosong.EDIT:
--cached
dan--deleted
flag digunakan bersama-sama untuk menjaga terhadap penghapusan file yang belum dihapus secara tidak sengaja.sumber
Beri tahu perintah untuk secara otomatis membuat file yang telah dimodifikasi dan dihapus, tetapi file baru yang belum Anda beri tahu tentang Git tidak terpengaruh:
atau
sumber
Berikut ini akan berfungsi, bahkan jika Anda memiliki banyak file untuk diproses:
Anda mungkin juga ingin berkomentar.
Untuk detailnya, lihat: Skrip Git yang Berguna
sumber
Silakan gunakan
-t
untuk melihat perintah mana yang sebenarnya sedang dijalankanSaya baru saja men-tweak jawaban Virender untuk melakukan hal yang sama:
sumber
Tak satu pun dari flag untuk git-add hanya akan mem-stage file yang dihapus; jika semua yang Anda modifikasi adalah file yang dihapus, maka Anda baik-baik saja, tetapi sebaliknya, Anda perlu menjalankan git-status dan mengurai hasilnya.
Menolak jawaban Jeremy, inilah yang saya dapat:
grep -v
baris.git rm
.Menempelkan ini ke dalam shell alias sekarang ...
sumber
Seperti yang telah disebutkan
tahap file yang dihapus untuk dihapus, TETAPI JUGA file yang dimodifikasi untuk pembaruan.
Untuk membatalkan tahapan file yang dimodifikasi dapat Anda lakukan
jika Anda ingin menjaga komitmen Anda terorganisir dan bersih.
CATATAN: Ini juga bisa menghapus stage file yang dihapus, jadi berhati-hatilah dengan wildcard itu.
sumber
Ini bekerja untuk saya setelah saya menghapus file.
sumber
Saya membutuhkan tombol "ubah panggung" yang sama dan menggunakan git gui. itu juga menambahkan semua.
Dan setelah "tahap berubah" saya membuat "komit" ...
jadi direktori kerja saya bersih lagi.
sumber
Menghapus semua file yang terdaftar berdasarkan
git ls-files
perintah (-d hanya menampilkan file yang dihapus). Tidak berfungsi untuk file dengan spasi di nama file atau path, tetapi mudah diingatsumber
Anda dapat menggunakan
git add -u <filenames>
untuk mem-stage file yang dihapus saja.Misalnya, jika Anda menghapus file
templates/*.tpl
, maka gunakangit add -u templates/*.tpl
.The
-u
diperlukan dalam rangka untuk merujuk ke file yang ada di repositori tetapi tidak lagi ada di direktori kerja. Jika tidak, defaultnyagit add
adalah untuk mencari file di direktori kerja, dan jika Anda menentukan file yang Anda hapus di sana, itu tidak akan menemukannya.sumber
Menambahkan alias sistem untuk pementasan file yang dihapus sebagai perintah
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
bash
diinstal.sumber
(Namun variasi lain)
Saya ingin menghapus semua yang sudah dihapus dari file disk tetapi dari satu folder tertentu, membiarkan folder lain tidak tersentuh. Berikut ini bekerja untuk saya:
sumber
sesuatu seperti
mungkin melakukannya.
sumber
git diff --diff-filter=D --name-only | xargs git rm
Untuk proyek studio visual
yang berguna ketika jalur file yang dihapus memiliki ruang
sumber
Solusi paling fleksibel yang saya temukan hingga saat ini adalah untuk
Dan pilih semua file yang dihapus yang ingin saya tampilkan.
(Catatan Saya biasanya melakukan semua commandline di git, tetapi git menangani file yang dihapus agak canggung).
sumber
git add -u path/to/my/deleted-files-pattern-*.yml
jadi ini adalah jawaban terbaik bagi saya (tidak ingin menampilkan semua file yang dihapus, tetapi 50 dari beberapa ratus).