git masih menampilkan file yang dimodifikasi setelah menambahkan ke .gitignore

252

Saya menambahkan ini ke file .gitignore

.idea/*

tapi bagaimanapun statusnya adalah:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

apa yang saya lakukan salah? saya bahkan menambahkan .idea / * ke global ~ / .gitignore_global tetapi status git, tetap menunjukkan kepada saya:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml
Kata Kaldybaev
sumber

Jawaban:

422

Anda .gitignoreberfungsi, tetapi masih melacak file karena sudah ada dalam indeks.

Untuk menghentikan ini, Anda harus melakukan: git rm -r --cached .idea/

Ketika Anda komit .idea/direktori akan dihapus dari repositori git Anda dan komit berikut akan mengabaikan .idea/direktori.

PS: Anda bisa menggunakan .idea/alih-alih .idea/*mengabaikan direktori. Anda dapat menemukan info lebih lanjut tentang pola pada para Gitignore halaman manual .


Kutipan bermanfaat dari git-rmhalaman manual

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.
mcls
sumber
Tolong jelaskan apa yang Anda maksud dengan "Hanya menambahkan .idea / akan berhasil juga". Apakah ini solusi alternatif untuk menggunakan .gitignoredan kemudian melakukan git rm -cached?
Mehrad
3
@Mehrad tidak perlu untuk * di .gitignore
Steve Pitchers
2
Tidak, hanya menambahkan .idea / tidak berfungsi, karena seperti yang Anda katakan di jawabannya, itu sudah ada dalam indeks.
Henrique de Sousa
15
Jadi Anda mengatakan bahwa Anda perlu commitsetelah menghapus file yang di-cache? Itu benar-benar tampak kontra-intuitif; ini adalah file yang saya TIDAK ingin komit. Dan saya tidak ingin mereka dihapus dari repositori (saya hanya ingin mereka tidak lagi berkeliaran berantakan saya git status). Atau apakah saya benar-benar bingung?
Scott Biggs
6
File-nya sudah dilacak oleh git karena komit sebelumnya, jadi untuk menghapusnya, Anda harus membuat komit baru yang menghapusnya dari repositori.
mcls
47

Bagi orang-orang yang mungkin masih mencari masalah ini, cari di halaman ini saja.

Ini akan membantu Anda menghapus file indeks yang di-cache, dan kemudian hanya menambahkan yang Anda butuhkan, termasuk perubahan ke .gitignorefile Anda .

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

Ini sedikit info lebih lanjut.

  1. Perintah ini akan menghapus semua file dalam cache dari indeks.
  2. Perintah ini akan menambahkan semua file kecuali yang disebutkan dalam gitignore.
  3. Perintah ini akan mengkomit file Anda lagi dan menghapus file yang ingin Anda abaikan, tetapi simpan di direktori lokal Anda.
Sidhanshu_
sumber
1
Ini berguna bagi saya, saya hanya akan mencatat bahwa di windows cmd tanda kutip tunggal tampaknya tidak berfungsi di # 3. Menggunakan git commit -am "Menghapus file yang diabaikan" Tidak berhasil.
Sundance.101
1
Jangan khawatir, dan terima kasih lagi untuk jawaban yang jelas dan ringkas.
Sundance.101
1
Solusi ini benar-benar mengacaukan file proyek saya. Saya harus mengembalikan semuanya setelah melakukan ini.
Fatmajk
1

Solusi yang ditawarkan di sini dan di tempat lain tidak berhasil untuk saya, jadi saya akan menambah diskusi untuk pembaca masa depan. Saya memang belum sepenuhnya memahami prosedurnya, tetapi akhirnya menyelesaikan masalah saya (yang mirip) dan ingin berbagi.

Saya tidak sengaja telah men-cache beberapa direktori-dokumen dengan beberapa ratus file ketika bekerja dengan git di IntelliJ IDEA pada Windows 10, dan setelah menambahkannya ke .gitignore(dan MUNGKIN memindahkannya sedikit), saya tidak bisa menghapusnya dari Default Changelist.

Saya pertama kali melakukan perubahan aktual yang saya buat, kemudian menyelesaikannya - butuh waktu terlalu lama. Saya mencoba git rm -r --cached .tetapi akan selalu mendapatkan path-specKESALAHAN, dengan variasi yang berbeda path-specserta dengan -fdan -rbendera.

git statusmasih akan menunjukkan nama file, jadi saya mencoba menggunakan beberapa kata demi kata git rm -cached, tetapi tidak berhasil. Menyembunyikan dan menghapus perubahan tampaknya berhasil, tetapi mereka harus antri lagi setelah beberapa waktu (saya agak kabur tentang kerangka waktu yang tepat). Saya akhirnya menghapus entri ini untuk penggunaan yang baik

git reset

Saya menganggap ini hanya BAIK IDEA ketika Anda tidak memiliki perubahan bertahap / cache bahwa Anda benar-benar ingin melakukan.

kiloton
sumber
0

Cukup tambahkan git rm -r --cached <folder_name/file_name>

Terkadang, Anda memperbarui file .gitignore setelah perintah komit file. Jadi, file-file itu di-cache dalam memori. Untuk menghapus file yang di-cache, gunakan perintah di atas.

Abhilash Ramteke
sumber
-2
  1. Git tambahkan.

  2. Status git // Periksa file yang sedang dimodifikasi

    // git atur ulang KEPALA --- ganti file mana yang ingin Anda abaikan

  3. git reset HEAD .idea / <- Mereka yang ingin mengecualikan .idea dari sebelum melakukan // git memeriksa status dan file ide akan hilang, dan Anda siap untuk pergi!

  4. git commit -m ''

  5. git push

Lim Kean Phang
sumber
Ini akan menjadi asumsi bahwa OP ingin mengatur ulang.
SovietFrontier