Komit awal saya berisi beberapa file log. Saya telah menambahkan *log
ke saya .gitignore
, dan sekarang saya ingin menghapus file log dari repositori saya.
git rm mylogfile.log
akan menghapus file dari repositori, tetapi juga akan menghapusnya dari sistem file lokal.
Bagaimana saya bisa menghapus file ini dari repo tanpa menghapus salinan file lokal saya?
git
repository
remote-server
delete-file
git-rm
mveerman
sumber
sumber
Jawaban:
Dari file man :
Jadi, untuk satu file:
dan untuk satu direktori:
sumber
svn rm --keep-local
.git pull
jika Anda berada di belakang komit setelahgit rm
git commit -m "Commit message"
dangit push
. Jika Anda memiliki perubahan bertahap lainnya (periksa dengangit status
), mereka juga akan berkomitmen saat ini.git rm --cached mylogfile.log
dan menghapus file dari repositori. Untuk menghindari kehilangan file pada sistem produktif saya melakukan backup file dan tarik setelah ini. File dihapus seperti yang disebutkan sebelumnya dan perlu disalin kembali dari cadangan Anda. Ini cukup menyakitkan, tetapi saya tidak menemukan solusi yang lebih baik untuk masalah ini.Untuk menghapus seluruh folder dari repo (seperti file Resharper), lakukan ini:
Saya telah melakukan beberapa file resharper, dan tidak ingin itu bertahan untuk pengguna proyek lainnya.
sumber
Git Push repo branch
untuk benar-benar menghapus file dari remote.Anda juga dapat menghapus file dari repositori berdasarkan .gitignore Anda tanpa menghapusnya dari sistem file lokal:
Atau, sebagai alternatif, pada Windows Powershell:
sumber
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
. Silakan pertimbangkan untuk memodifikasi atau menambahkan solusi ini ke jawaban di sini, karena ini adalah alat yang hebat untuk memiliki ....gitkeep
yang menyimpan folder kosong di repositori. Misalnya..gitignore
berisi folderuploads
dan repo dipaksa untuk melacak.gitkeep
. Dengan menghapus semua dari repo diuploads
bawahnya akan menghapus juga.gitkeep
.Sesuai Jawaban saya di sini: /programming/6313126/how-to-remove-a-directory-in-my-github-repository
Untuk menghapus folder / direktori atau file hanya dari repositori git dan bukan dari lokal coba 3 langkah sederhana.
Langkah-langkah untuk menghapus direktori
Langkah-langkah untuk mengabaikan folder itu di commit berikutnya
File .gitignore akan terlihat seperti ini
sumber
Juga, jika Anda telah melakukan data sensitif (misalnya file yang berisi kata sandi), Anda harus menghapusnya sepenuhnya dari sejarah repositori. Berikut panduan yang menjelaskan cara melakukannya: http://help.github.com/remove-sensitive-data/
sumber
Solusi yang lebih umum:
Edit
.gitignore
file.ECHO mylogfile.log >> .gitignore
Hapus semua item dari indeks.
git rm -r -f --cached .
Buat kembali indeks.
git add .
Buat komit baru
git commit -m "Removed mylogfile.log"
sumber
rm --cashed
adalah bahwa pada akhirnya akan menghapus file ketika orang menarik - bukan? Dan ini bukan yang diinginkan orang ketika mereka mengatakan "Hapus file dari repositori tanpa menghapusnya dari sistem file lokal ". Sekarang mengapa solusi di atas diterima di luar saya - mungkin OP bekerja sendiri dan tidak pernah menarik? Tidak tahu Saya memahami masalah github "sekali didorong selalu ada" ofc(Dari https://help.github.com/articles/ignoring-files )
Karenanya, tidak menghapusnya, tetapi mengabaikan perubahan untuk selamanya. Saya pikir ini hanya berfungsi secara lokal, jadi rekan kerja masih dapat melihat perubahan kecuali jika mereka menjalankan perintah yang sama seperti di atas. (Namun masih perlu memverifikasi ini.)
Catatan: Ini tidak menjawab pertanyaan secara langsung, tetapi didasarkan pada pertanyaan tindak lanjut di komentar dari jawaban lain.
sumber
Jika Anda ingin membuka arsip file dan tidak menghapus dari repo lokal dan jauh kemudian gunakan perintah ini:
sumber
Jawaban di atas tidak bekerja untuk saya. Saya dulu
filter-branch
menghapus semua file yang dikomit.Hapus file dari repositori git dengan:
Hapus folder dari repositori git dengan:
Ini menghapus direktori atau file dari semua komit.
Anda dapat menentukan komit dengan menggunakan:
Atau rentang:
Untuk mendorong semuanya ke jarak jauh, Anda dapat melakukan:
sumber
git rm -r --cached NAME
adalah trik untuk menghapusnya dari repo git lokal Anda dan mencegahnya memengaruhi siapa pun yang menarik nanti (dengan menghapus riwayat file atau direktori dari git.)Abaikan file, hapus file dari git, perbarui git (untuk penghapusan).
Catatan: ini tidak berhubungan dengan riwayat untuk informasi sensitif.
Proses ini pasti membutuhkan beberapa upaya dari apa yang terjadi dengan git. Seiring waktu, setelah mendapatkan itu, saya telah belajar untuk melakukan proses seperti:
1) Abaikan file
.gitignore
untuk mengabaikannya - dalam banyak kasus seperti milik Anda, direktori induk, misalnyalog/
akan menjadi regex yang digunakan..gitignore
perubahan file itu (tidak yakin jika push perlu diingatkan, tidak ada salahnya jika dilakukan).2) Hapus file dari git (hanya).
git remove --cached some_dir/
3) Tambahkan dan komit perubahan itu (pada dasarnya ini adalah perubahan untuk "menambahkan" menghapus hal-hal, meskipun perintah "tambahkan" membingungkan!)
git add .
git commit -m"removal"
sumber