git vẫn hiển thị các tệp như đã sửa đổi sau khi thêm vào .gitignore


252

Tôi đang thêm nó vào tập tin .gitignore

.idea/*

nhưng dù sao thì trạng thái là:

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

tôi đang làm gì sai tôi thậm chí đã thêm .idea / * vào toàn cầu ~ / .gitignore_global nhưng trạng thái git, dù sao cũng cho tôi thấy:

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

Câu trả lời:


422

Bạn .gitignoređang làm việc, nhưng nó vẫn theo dõi các tệp vì chúng đã có trong chỉ mục.

Để ngăn chặn điều này bạn phải làm: git rm -r --cached .idea/

Khi bạn cam kết .idea/thư mục sẽ bị xóa khỏi kho git của bạn và các cam kết sau sẽ bỏ qua .idea/thư mục.

PS: Bạn có thể sử dụng .idea/thay vì .idea/*bỏ qua một thư mục. Bạn có thể tìm thêm thông tin về các mô hình trên các .gitignore trang người đàn ông .


Trích dẫn hữu ích từ git-rmtrang người đàn ông

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

Bạn vui lòng giải thích ý của bạn bằng cách "Chỉ cần thêm .idea / cũng sẽ hoạt động". Đây có phải là một giải pháp thay thế cho việc sử dụng .gitignorevà sau đó làm git rm -cached?
Mehrad

3
@Mehrad không cần * trong .gitignore
Steve Pitchers

2
Không, chỉ cần thêm .idea / không hoạt động, vì như bạn đã nói trong câu trả lời, nó đã có trong chỉ mục.
Henrique de Sousa

15
Vì vậy, bạn đang nói rằng bạn cần phải commitsau khi loại bỏ các tập tin lưu trữ? Điều đó thực sự có vẻ phản trực giác; đây là những tập tin tôi KHÔNG muốn cam kết. Và tôi không muốn chúng bị xóa khỏi kho lưu trữ (tôi chỉ muốn chúng không còn bị treo lung tung nữa git status). Hay tôi chỉ thực sự bối rối?
Scott Biggie

6
Các tệp của anh ấy đã được theo dõi bởi git vì một cam kết trước đó, vì vậy để xóa chúng, bạn phải tạo một cam kết mới loại bỏ chúng khỏi kho lưu trữ.
mcls

47

Đối với những người có thể vẫn đang tìm kiếm vấn đề này, chỉ nhìn vào trang này.

Điều này sẽ giúp bạn xóa các tệp chỉ mục được lưu trong bộ nhớ cache và sau đó chỉ thêm những .gitignoretệp bạn cần, bao gồm các thay đổi cho tệp của bạn .

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

Đây là một chút thông tin.

  1. Lệnh này sẽ xóa tất cả các tệp được lưu trong bộ nhớ cache khỏi chỉ mục.
  2. Lệnh này sẽ thêm tất cả các tệp trừ những tệp được đề cập trong gitignore.
  3. Lệnh này sẽ xác nhận lại các tệp của bạn và xóa các tệp bạn muốn git bỏ qua, nhưng giữ chúng trong thư mục cục bộ của bạn.

1
Điều này hữu ích cho tôi, tôi chỉ lưu ý rằng trong windows cmd, các trích dẫn đơn lẻ dường như không hoạt động ở # 3. Mặc dù vậy, sử dụng git commit -am "Xóa các tệp bị bỏ qua" Không hoạt động.
Sundance.101

1
Không phải lo lắng, và cảm ơn một lần nữa cho câu trả lời rõ ràng và súc tích.
Sundance.101

1
Giải pháp này đang gây rối với các tập tin dự án của tôi thực sự. Tôi đã phải hoàn nguyên mọi thứ sau khi làm điều này.
Fatmajk

1

Các giải pháp được cung cấp ở đây và ở những nơi khác không hiệu quả với tôi, vì vậy tôi sẽ thêm vào cuộc thảo luận cho những độc giả tương lai. Tôi thừa nhận chưa hiểu đầy đủ về quy trình, nhưng cuối cùng đã giải quyết được vấn đề (tương tự) của tôi và muốn chia sẻ.

Tôi đã vô tình lưu trữ một số thư mục tài liệu với hàng trăm tệp khi làm việc với git trong IntelliJ IDEA trên Windows 10 và sau khi thêm chúng vào .gitignore(và PROBABLY di chuyển chúng xung quanh một chút) Tôi không thể xóa chúng khỏi Trình thay đổi mặc định.

Lần đầu tiên tôi cam kết những thay đổi thực tế tôi đã thực hiện, sau đó tiếp tục giải quyết vấn đề này - đưa tôi đi quá lâu. Tôi đã thử git rm -r --cached .nhưng sẽ luôn nhận được path-specLRI, với các biến thể khác nhau path-speccũng như với -f-rcờ.

git statusvẫn sẽ hiển thị tên tệp, vì vậy tôi đã thử sử dụng một số nguyên văn với git rm -cached, nhưng không có may mắn. Stashing và unstashing các thay đổi dường như hoạt động, nhưng chúng đã được xếp hàng một lần nữa sau một thời gian (Tôi là một người mơ hồ về khung thời gian chính xác). Cuối cùng tôi đã loại bỏ các mục này cho tốt bằng cách sử dụng

git reset

Tôi cho rằng đây chỉ là một IDEA TỐT khi bạn không có thay đổi nào được dàn dựng / lưu trữ mà bạn thực sự muốn cam kết.


0

Đơn giản chỉ cần thêm git rm -r --cached <folder_name/file_name>

Đôi khi, bạn cập nhật tệp .gitignore sau lệnh commit của tệp. Vì vậy, các tập tin được lưu trữ trong bộ nhớ. Để loại bỏ các tập tin lưu trữ, sử dụng lệnh trên.


-2
  1. Git thêm.

  2. Trạng thái Git // Kiểm tra tệp đang được sửa đổi

    // git reset HEAD --- thay vào tập tin bạn muốn bỏ qua

  3. git reset HEAD .idea / <- Những người muốn loại trừ .idea từ trước khi cam kết // trạng thái kiểm tra git và tệp ý tưởng sẽ biến mất và bạn đã sẵn sàng!

  4. cam kết -m ''

  5. đẩy git


Đây sẽ là một giả định mà OP muốn thiết lập lại.
SovietFrontier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.