Saya berkomitmen dan mendorong beberapa direktori ke github. Setelah itu, saya mengubah .gitignore
file menambahkan direktori yang harus diabaikan. Semuanya berfungsi dengan baik, tetapi direktori (sekarang diabaikan) tetap di github.
Bagaimana cara menghapus direktori itu dari github dan riwayat repositori?
Jawaban:
Aturan dalam
.gitignore
file Anda hanya berlaku untuk file yang tidak dilacak. Karena file-file di bawah direktori itu sudah dikomit di repositori Anda, Anda harus menghapusnya, membuat komit, dan mendorongnya ke GitHub:Anda tidak dapat menghapus file dari riwayat Anda tanpa menulis ulang sejarah repositori Anda - Anda tidak boleh melakukan ini jika orang lain bekerja dengan repositori Anda, atau Anda menggunakannya dari banyak komputer. Jika Anda masih ingin melakukan itu, Anda dapat menggunakannya
git filter-branch
untuk menulis ulang sejarah - ada panduan yang bermanfaat di sini .Selain itu, perhatikan keluaran dari
git rm -r --cached some-directory
akan menjadi sesuatu seperti:The
rm
adalah umpan balik dari git tentang repositori; file-file tersebut masih dalam direktori kerja.sumber
-r
dan--cached
. Terima kasih.-r
berarti rekursif, perlu jika Anda melakukan seluruh direktori.--cached
mengesampingkan perilaku normal git untuk menghapusnya dari direktori kerja dan mengatur penghapusan untuk komit, dan membuat git hanya beroperasi pada area staging yang siap untuk melakukan. Begitulah cara Anda memberi tahu git bahwa Anda ingin menyimpan salinan file lokal Anda.git reset name_of_file
untuk apa yang dijelaskan di atas berfungsiSaya melakukan ini:
Yang akan menghapus semua file / folder yang ada di git Anda abaikan, menghemat Anda harus memilih masing-masing secara manual
Ini tampaknya telah berhenti bekerja untuk saya, sekarang saya lakukan:
sumber
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
Sesuai Jawaban saya di sini: Bagaimana cara menghapus direktori dari repositori git?
Untuk menghapus folder / direktori 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
Jawaban pertama Blundell tidak berhasil untuk saya. Namun itu menunjukkan saya jalan yang benar. Saya telah melakukan hal yang sama seperti ini:
Saya menyarankan Anda untuk memeriksa file yang akan dihapus terlebih dahulu dengan menjalankan pernyataan di bawah ini:
Saya menggunakan file .gitignore default untuk studio visual dan saya perhatikan bahwa itu menghapus semua folder log dan bin dalam proyek yang bukan tindakan yang saya maksudkan.
sumber
Catatan: Solusi ini hanya bekerja dengan Github Desktop GUI .
Dengan menggunakan Github Desktop GUI itu sangat sederhana.
Pindahkan folder ke lokasi lain (untuk keluar dari folder proyek) sementara.
Edit
.gitignore
file Anda dan hapus entri folder yang akan menghapus repositori master pada halaman github.Komit dan Sinkronkan folder proyek.
Pindahkan kembali folder ke folder proyek
Sunting ulang
.gitignore
file.Itu saja.
sumber
Jawaban dari Blundell seharusnya berhasil, tetapi untuk beberapa alasan aneh itu tidak ada hubungannya dengan saya. Saya harus mem-pipe terlebih dahulu nama-nama file yang dihasilkan oleh perintah pertama ke dalam sebuah file kemudian loop melalui file itu dan menghapus file itu satu per satu.
sumber
Jika Anda juga perlu membersihkan file yang baru saja diabaikan dari riwayat commit cabang atau jika Anda tidak ingin file yang baru saja diabaikan dihapus dari penarikan di masa mendatang , lihat jawaban ini .
sumber
Jika Anda bekerja dari PowerShell, coba yang berikut ini sebagai satu perintah.
Kemudian,
git push --force --all
,.Dokumentasi: https://git-scm.com/docs/git-filter-branch
sumber
git filter-branch
berbeda dari menggunakangit rm
? Saya awalnya berpikir saya harus menggunakan versigit filter-branch
tetapi kebanyakan komentar di sini merekomendasikan menggunakangit rm
. Dari apa yang saya mengertigit rm
hanya menghapusnya dari direktori dan indeks kerja saat ini. Tetapi jika beberapa komit ditambahkan sebelumnya, itu masih dalam repositori.git rm
akan menghapus file dari komit terbaru ke masa depan.git filter-branch
memungkinkan kami menghapusnya dari seluruh riwayat. Lihat juga: help.github.com/articles/…