git ยังคงแสดงไฟล์ที่ถูกแก้ไขหลังจากเพิ่ม. gitignore


252

ฉันเพิ่มลงในไฟล์. gitignore

.idea/*

แต่อย่างไรก็ตามสถานะคือ:

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

ผมทำอะไรผิดหรือเปล่า ? ฉันได้เพิ่ม. aa / * ลงในโกลบอล~ / .gitignore_global แต่สถานะคอมไพล์แล้วแสดงให้ฉันเห็น:

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

คำตอบ:


422

คุณ.gitignoreใช้งานได้ แต่ยังคงติดตามไฟล์อยู่เพราะอยู่ในดัชนีแล้ว

หากต้องการหยุดสิ่งนี้คุณต้องทำ: git rm -r --cached .idea/

เมื่อคุณคอมมิท.idea/ไดเรกทอรีจะถูกลบออกจากที่เก็บ git ของคุณและคอมมิทต่อไปนี้จะไม่สนใจไดเร็.idea/กตอรี่

PS: คุณสามารถใช้.idea/แทนที่จะ.idea/*เพิกเฉยไดเรกทอรี คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบได้ที่หน้า . gitignore man


คำพูดที่เป็นประโยชน์จากgit-rmหน้าคน

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.

คุณช่วยอธิบายความหมายของคำว่า "เพิ่งเพิ่ม. aaa / ก็ใช้ได้เหมือนกัน" นี่คือวิธีการแก้ปัญหาทางเลือกที่จะใช้.gitignoreแล้วทำgit rm -cached?
Mehrad

3
@ Mehrad ไม่จำเป็นต้องมี * ใน. gitignore
Steve Pitchers

2
ไม่เพียงเพิ่ม. aide / ไม่ทำงานเพราะอย่างที่คุณพูดในคำตอบมันมีอยู่ในดัชนีแล้ว
Henrique de Sousa

15
ดังนั้นคุณจะบอกว่าคุณต้องcommitหลังจากลบไฟล์แคช? ที่ดูเหมือนว่าเคาน์เตอร์ง่าย นี่คือไฟล์ที่ฉันไม่ต้องการส่ง และฉันไม่ต้องการให้ลบออกจากพื้นที่เก็บข้อมูล (ฉันแค่อยากให้พวกเขาไม่ต้องยุ่งอยู่กับความยุ่งเหยิงอีกต่อไปgit status) หรือฉันแค่สับสนจริงๆ?
Scott Biggs

6
ไฟล์ของเขาถูกติดตามแล้วโดยคอมไพล์เนื่องจากคอมมิทก่อนหน้านี้ดังนั้นเพื่อที่จะลบคุณต้องสร้างคอมมิทใหม่ที่จะลบมันออกจากพื้นที่เก็บข้อมูล
mcls

47

สำหรับผู้ที่อาจกำลังค้นหาปัญหานี้อยู่กำลังดูหน้านี้เท่านั้น

วิธีนี้จะช่วยคุณลบไฟล์ดัชนีแคชแล้วเพิ่มเฉพาะไฟล์ที่คุณต้องการรวมถึงการเปลี่ยนแปลง.gitignoreไฟล์ของคุณ

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

นี่คือข้อมูลเพิ่มเติมเล็กน้อย

  1. คำสั่งนี้จะลบไฟล์แคชทั้งหมดออกจากดัชนี
  2. gitignoreคำสั่งนี้จะเพิ่มไฟล์ทั้งหมดยกเว้นผู้ที่ได้รับการกล่าวถึงใน
  3. คำสั่งนี้จะส่งไฟล์ของคุณอีกครั้งและลบไฟล์ที่คุณต้องการให้คอมไพล์ละเว้น แต่เก็บไว้ในไดเรกทอรีท้องถิ่นของคุณ

1
สิ่งนี้มีประโยชน์สำหรับฉันฉันจะทราบว่าใน windows cmd ราคาเดียวดูเหมือนจะไม่ทำงานใน # 3 การใช้คอมไพล์คอมมิต -am "การลบไฟล์ที่ถูกละเว้น" ใช้งานได้จริง
Sundance.101

1
ไม่ต้องกังวลและขอบคุณอีกครั้งสำหรับคำตอบที่ชัดเจนและรัดกุม
Sundance.101

1
วิธีแก้ปัญหานี้ยุ่งกับไฟล์โครงการของฉันจริงๆ ฉันต้องย้อนกลับทุกอย่างหลังจากทำสิ่งนี้
Fatmajk

1

โซลูชันที่นำเสนอที่นี่และในที่อื่น ๆ ไม่ได้ผลสำหรับฉันดังนั้นฉันจะเพิ่มการอภิปรายสำหรับผู้อ่านในอนาคต ฉันยอมรับว่ายังไม่เข้าใจขั้นตอนทั้งหมด แต่ได้แก้ไขปัญหาที่คล้ายกันของฉันและต้องการแชร์

ฉันบังเอิญแคชไดเรกทอรีไดเรกทอรีบางไฟล์ที่มีหลายร้อยไฟล์เมื่อทำงานกับคอมไพล์ใน IntelliJ IDEA บน Windows 10 และหลังจากเพิ่มไปยัง.gitignore(และ PROBABLY ย้ายไฟล์เหล่านั้นไปเล็กน้อย) ฉันไม่สามารถลบมันออกจากรายการเริ่มต้นที่เปลี่ยนแปลงได้

ก่อนอื่นฉันยอมรับการเปลี่ยนแปลงที่เกิดขึ้นจริงจากนั้นก็แก้ปัญหานี้ - ใช้เวลานานเกินไป ฉันพยายามgit rm -r --cached .แต่มักจะได้รับpath-specข้อผิดพลาดด้วยรูปแบบที่แตกต่างกันpath-specเช่นเดียวกับกับ-fและ-rธง

git statusจะยังคงแสดงชื่อไฟล์ดังนั้นฉันพยายามใช้คำต่อคำบางคำด้วยgit rm -cachedแต่ไม่มีโชค การหยุดและการคลายการเปลี่ยนแปลงดูเหมือนว่าจะทำงานได้ แต่พวกเขาได้รับการเข้าคิวอีกครั้งหลังจากเวลา (ฉันเป็นหมอกมัวในกรอบเวลาที่แน่นอน) ในที่สุดฉันได้ลบรายการเหล่านี้เพื่อการใช้งานที่ดี

git reset

ฉันคิดว่านี่เป็นเพียงความคิดที่ดีเมื่อคุณไม่มีการเปลี่ยนแปลงฉาก / แคชที่คุณต้องการกระทำจริง ๆ


0

เพียงเพิ่ม git rm -r --cached <folder_name/file_name>

บางครั้งคุณอัพเดตไฟล์. gitignore หลังจากคำสั่ง commit ของไฟล์ ดังนั้นไฟล์จะถูกแคชในหน่วยความจำ หากต้องการลบไฟล์แคชให้ใช้คำสั่งด้านบน


-2
  1. เพิ่ม Git

  2. สถานะ Git // ตรวจสอบไฟล์ที่กำลังแก้ไข

    // git reset HEAD --- แทนที่ไฟล์ที่คุณต้องการเพิกเฉย

  3. git reset HEAD .idea / <- ผู้ที่ต้องการยกเว้น. aide จากก่อนที่จะยอมรับ // สถานะการตรวจสอบ git และไฟล์ความคิดจะหายไปและคุณพร้อมแล้ว!

  4. คอมไพล์กระทำ -m ''

  5. git push


นี่จะเป็นข้อสันนิษฐานว่า OP ต้องการรีเซ็ต
SovietFrontier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.