Sinkronisasi ulang git repo dengan file .gitignore baru
192
Apakah mungkin untuk "menyegarkan" repositori git setelah memperbarui file gitignore?
Saya baru saja menambahkan lebih banyak ignorations (?) Ke gitignore saya dan ingin menghapus hal-hal yang sudah ada dalam repo yang cocok dengan file baru.
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( Pastikan untuk melakukan pertama perubahan Anda ingin menyimpan , untuk menghindari insiden apapun jball037 komentar di bawah ini .
The --cachedopsi akan menyimpan file-file Anda tersentuh pada disk Anda sekalipun.)
tetapi file yang tidak cocok akan tetap ada di repositori Anda dan harus dihapus secara eksplisit dengan melampirkan path mereka dengan tanda kutip ganda:
Saya telah menemukan bahwa langkah git add tidak perlu, ketika saya menjalankan status git setelah git rm --cached, file yang dihapus sudah ada di area stage dan Anda bisa langsung melanjutkan dan mengkomitnya.
bab
3
Saya hanya menjalankan ini, kehilangan semua perubahan yang tidak dikomit, dan hampir mengumumkan pengunduran diri dari pekerjaan saya. Jawaban yang diterima pada utas ini menyelamatkan hidup saya: stackoverflow.com/questions/2125710/how-to-revert-a-git-rm-r
jball037
2
@VonC maaf, itu tidak dimaksudkan sebagai kata-kata kasar atau tongkat :) Tapi ya, saya menggunakan --cached dan semua perubahan saya tidak berkomitmen hilang ketika saya memeriksa file saya. Panik sesaat tapi "git reset HEAD" memulihkan file saya (tapi kali ini tanpa file yang saya tentukan di .gitignore, jadi solusi Anda masih berfungsi!)
jball037
3
@ jball037 Bagus. Saya telah menambahkan peringatan dan mengedit jawaban sesuai dengan itu.
VonC
1
jika saja saya membaca satu baris lebih jauh sebelum melakukan ini "(pastikan untuk melakukan lebih dulu perubahan yang ingin Anda pertahankan, untuk menghindari insiden apa pun sebagai jball037" #fml
Aiden Strydom
9
Saya mungkin salah paham, tetapi apakah Anda mencoba menghapus file yang baru saja diabaikan atau Anda ingin mengabaikan modifikasi baru pada file-file ini? Dalam hal ini, masalahnya berfungsi.
Jika Anda ingin menghapus file yang diabaikan sebelumnya yang dilakukan, maka gunakan
Ini adalah alasan yang sangat sederhana untuk menghapus file setelah saya memperbarui .gitignore saya. Namun perlu beberapa pembaruan kecil: `` git rm -cached git ls-files -i –exclude-standard git commit -m 'bersih-bersih ``
Aaron
1
Saya tahu ini adalah pertanyaan lama, tetapi solusi gracchus tidak berfungsi jika nama file berisi spasi. Solusi VonC untuk mengajukan nama dengan spasi adalah dengan tidak menghapusnya menggunakan --ignore-unmatch, kemudian menghapusnya secara manual, tetapi ini tidak akan berfungsi dengan baik jika ada banyak.
Berikut ini adalah solusi yang memanfaatkan bash array untuk menangkap semua file.
Jawaban:
Solusi yang disebutkan dalam " .gitignore file not ignoring " agak ekstrim, tetapi harus berfungsi:
( Pastikan untuk melakukan pertama perubahan Anda ingin menyimpan , untuk menghindari insiden apapun jball037 komentar di bawah ini .
The
--cached
opsi akan menyimpan file-file Anda tersentuh pada disk Anda sekalipun.)Anda juga memiliki solusi lain yang lebih bagus dalam posting blog " Membuat Git mengabaikan file yang sudah dilacak ":
Bassim menyarankan dalam editnya :
File dengan ruang di jalurnya
sumber
Saya mungkin salah paham, tetapi apakah Anda mencoba menghapus file yang baru saja diabaikan atau Anda ingin mengabaikan modifikasi baru pada file-file ini? Dalam hal ini, masalahnya berfungsi.
Jika Anda ingin menghapus file yang diabaikan sebelumnya yang dilakukan, maka gunakan
sumber
git ls-files -i –exclude-standard
git commit -m 'bersih-bersih ``Saya tahu ini adalah pertanyaan lama, tetapi solusi gracchus tidak berfungsi jika nama file berisi spasi. Solusi VonC untuk mengajukan nama dengan spasi adalah dengan tidak menghapusnya menggunakan
--ignore-unmatch
, kemudian menghapusnya secara manual, tetapi ini tidak akan berfungsi dengan baik jika ada banyak.Berikut ini adalah solusi yang memanfaatkan bash array untuk menangkap semua file.
sumber