Saya memiliki beberapa file di repositori saya yang harus diabaikan, saya menambahkannya ke .gitignore tetapi, tentu saja, mereka tidak dihapus dari repositori saya.
Jadi pertanyaan saya adalah, apakah ada perintah atau skrip ajaib menggunakan cabang-filter yang dapat menulis ulang riwayat saya dan menghapus semua file ini dengan mudah? Atau hanya sebuah perintah yang akan membuat komit yang akan menghapusnya?
Jawaban:
Anda dapat menghapusnya dari repositori secara manual:
Atau, jika Anda memiliki banyak file:
Tapi ini sepertinya tidak berfungsi di Git Bash di Windows. Ini menghasilkan pesan kesalahan. Berikut ini berfungsi lebih baik:
Mengenai menulis ulang seluruh sejarah tanpa file-file ini, saya sangat ragu ada cara otomatis untuk melakukannya.
Dan kita semua tahu bahwa menulis ulang sejarah itu buruk, bukan? :)
sumber
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
tampaknya melakukan trikgit ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
Cara yang lebih mudah yang berfungsi pada OS apa pun adalah dengan melakukannya
Anda pada dasarnya membaca semua file, kecuali yang ada di .gitignore
sumber
Karena file-file di .gitignore tidak dilacak, Anda dapat menggunakan perintah git clean untuk menghapus file secara rekursif yang tidak di bawah kontrol versi.
Gunakan
git clean -xdn
untuk melakukan lari kering dan melihat apa yang akan dihapus.Kemudian gunakan
git clean -xdf
untuk menjalankannya.Pada dasarnya,
git clean -h
atauman git-clean
(dalam unix) akan memberi Anda bantuan.Ketahuilah bahwa perintah ini juga akan menghapus file baru yang tidak ada dalam area pementasan.
Semoga ini bisa membantu.
sumber
.gitignore
yang sedang dilacak.git clean -xdn
adalah lari kering yang tidak akan menghapus. yang berikutnya akan.Saya melakukan solusi yang sangat mudah dengan memanipulasi output dari pernyataan .gitignore dengan sed:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
Penjelasan:
sumber
sed
mudah?Di linux Anda dapat menggunakan perintah ini:
sebagai contoh saya ingin menghapus "* .py ~" jadi perintah saya harus ==>
find . -name "*.py~" -exec rm -f {} \;
sumber
Git akan mengabaikan file yang cocok dengan pola .gitignore setelah Anda menambahkannya ke .gitignore.
Tetapi file-file yang sudah ada di repositori akan tetap masuk
gunakan
git rm files_ignored; git commit -m 'rm no use files'
untuk menghapus file yang diabaikan.sumber