Câu hỏi Bỏ qua các tệp đã được cam kết với kho lưu trữ Git [trùng lặp]


Câu hỏi này đã có câu trả lời ở đây:

Tôi có kho lưu trữ Git đã được khởi tạo mà tôi đã thêm .gitignore để. Làm cách nào tôi có thể làm mới chỉ mục tệp để các tệp tôi muốn bỏ qua bị bỏ qua?


2192
2017-07-16 19:26


gốc




Các câu trả lời:


Để untrack một Độc thân tệp đã được thêm / khởi tạo vào kho lưu trữ của bạn, I E., ngừng theo dõi tệp nhưng không xóa tệp đó khỏi việc sử dụng hệ thống của bạn: git rm --cached filename

Để không bị xáo trộn mỗi tệp hiện có trong .gitignore:

Đầu tiên cam kết bất kỳ thay đổi mã chưa xử lý nào, và sau đó, chạy lệnh này:

git rm -r --cached .

Thao tác này sẽ xóa mọi tệp đã thay đổi khỏi mục lục(khu vực dàn dựng), sau đó chỉ cần chạy:

git add .

Cam kết:

git commit -m ".gitignore is now working"

Trở lại git rm --cached filename, sử dụng git add filename.

Đảm bảo cam kết tất cả các thay đổi quan trọng của bạn trước khi chạy git add .    Nếu không, bạn sẽ mất mọi thay đổi đối với các tệp khác.


3658
2017-07-06 17:09



được nhận thức để cam kết tất cả các thay đổi của bạn trước đây, nếu không bạn sẽ mất quyền kiểm soát tất cả các tệp đã thay đổi - Hoang Pham
@TravisWebb Bạn sẽ phải chắc chắn rằng bạn đã thiết lập .gitignore trước. Ngoài ra tôi có xu hướng không xóa tất cả các tệp khỏi chỉ mục, chỉ những tệp tôi cần bằng cách sử dụng Fileglobs chẳng hạn như * .o - Jason S
@trobrock bạn có thể vui lòng chỉnh sửa câu trả lời của bạn để chứa một cam kết ngay từ đầu? thks trước. - MEM
Câu trả lời hay nhưng git rm --cached filename có vẻ như một chút ít mạnh mẽ .. - Jim Morrison
@ JimMorrison bạn bỏ lỡ điểm. nếu bạn có một dự án lớn với một .gitignore phức tạp (chẳng hạn như một dự án C # trong Visual Studio), hãy tìm ra từng tệp riêng lẻ cần xóa là tẻ nhạt. ba lệnh đơn giản này sửa mọi thứ không đau đớn. - longneck


Nếu bạn đang cố gắng bỏ qua các thay đổi đối với tệp đã được theo dõi trong kho lưu trữ (ví dụ: tệp dev.properties mà bạn cần phải thay đổi cho môi trường cục bộ của mình nhưng bạn sẽ không bao giờ muốn kiểm tra những thay đổi này) hơn những gì bạn muốn làm Là:

git update-index --assume-unchanged <file>

Nếu bạn muốn bắt đầu theo dõi các thay đổi một lần nữa

git update-index --no-assume-unchanged <file>

Xem git-update-index (1) Trang Thủ công.

Ngoài ra, hãy xem skip-worktree và no-skip-worktree tùy chọn để cập nhật chỉ mục nếu bạn cần điều này để tồn tại quá khứ khi cài đặt lại git (thông qua)


Cập nhật: Vì mọi người đã yêu cầu, đây là một bí danh (và được cập nhật kể từ khi được nhận xét bên dưới) để xem những tệp nào hiện đang bị "bỏ qua" (--assume-không đổi) trong vùng làm việc cục bộ của bạn

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

518
2017-09-14 23:55



Đây là thiên tài! Cực kỳ hữu ích. Bạn có biết nếu có một cách để có được một danh sách tất cả các tập tin 'giữ'? - artfulrobot
Điều này sẽ phù hợp với bạn: git ls-files -v Nếu ký tự được in là chữ thường, tệp sẽ được đánh dấu là không thay đổi. xem: stackoverflow.com/a/2363495/677381 và: git-scm.com/docs/git-ls-files - dyodji
@dyodji Liệu điều này chỉ ảnh hưởng đến bản thân mình? Hoặc tất cả người dùng? - wisbucky
Đây là phiên bản tiết kiệm hơn một chút của tôi ignored bí danh, như nó xuất hiện trong tập tin ~ / .gitconfig của tôi: ignored = !git ls-files -v $(git rev-parse --show-toplevel) | (grep '^[[:lower:]]' || echo 'None ignored.') && echo '\nIgnore changes with: git update-index --assume-unchanged <file> \nor track again with: git update-index --no-assume-unchanged <file>' Phần toplevel của nó đảm bảo nó tìm kiếm toàn bộ kho lưu trữ. - Chris
không may --assume-unchanged không làm việc với git stash: các thay đổi được hoàn nguyên trong thời gian git stash và không được áp dụng lại trong thời gian git stash pop. Xem câu hỏi này. - Scott Weldon


Để hủy bỏ một tệp đã được thêm / khởi tạo vào kho lưu trữ của bạn, tức là dừng theo dõi tệp nhưng không xóa tệp đó khỏi việc sử dụng hệ thống của bạn: git rm --cached filename


351
2017-07-18 08:15



Đây là cách hoàn hảo để loại bỏ vài tập tin tôi đã thêm, cam kết, nhưng sau đó nhận ra không cần phải được theo dõi. Sau khi thêm các tệp đó vào .gitignore, tôi đã có thể thực hiện điều này và hủy chúng hoàn toàn. - Andrew Larned
Mẹo: ví dụ: nếu bạn thêm *.config cho bạn .gitignore, bạn có thể làm git rm --cached *.config ngừng theo dõi tất cả *.config các tập tin. - dav_i
Cũng lưu ý rằng việc này sẽ xóa các tệp khỏi các bản repos khác mà bạn đẩy tới, mặc dù nó vẫn nằm trên hệ thống của bạn. Nếu bạn chỉ bỏ qua các thay đổi đối với tệp và không muốn xóa chúng khỏi các bản dùng thử của người dùng khác, hãy thử sử dụng git update-index --assume-unchanged file.name - dav_i
IMO, đây là câu trả lời đúng. Câu trả lời của Wiki hoạt động-kinda, nhưng cực kỳ nặng tay, đặc biệt là khi đặt câu hỏi. (Tôi sẽ sửa chữa wiki, nhưng tôi không chắc chắn như thế nào. "Sớm!";) - Olie
@Olie be vô cùng cẩn thận với "giải pháp" này. Điều này sẽ xóa tệp trong repo và bất kỳ ai kéo thay đổi này cũng sẽ bị xóa tệp. Giải pháp tốt nhất sẽ là assume-unchanged, như @dav_i đã nói, hoặc --skip-worktree như một sự thay thế. - Sebastianb


Vâng - .gitignore hệ thống chỉ bỏ qua các tệp hiện không được kiểm soát phiên bản từ git.

I E. nếu bạn đã thêm một tệp có tên test.txt sử dụng git-add, sau đó thêm test.txt đến .gitignore vẫn sẽ gây ra thay đổi đối với test.txt để được theo dõi.

Bạn sẽ phải git rm test.txt đầu tiên và cam kết thay đổi đó. Chỉ sau đó sẽ thay đổi thành test.txt được bỏ qua.


78
2018-02-02 15:59



Điều này không hoàn toàn đúng, có thể bỏ qua các thay đổi trong tệp được theo dõi ... xem câu trả lời của tôi: stackoverflow.com/a/11366713/677381 - dyodji
git update-index - không thay đổi <file> và git rm --caheced <file> không thực sự làm việc cho tôi. Tôi đã thực hiện git rm <file> và sau đó tạo tệp mới sau đó <file>được bỏ qua thành công. Tôi đang sử dụng phiên bản git 1.8.1 - Nếu đó là vấn đề. - mujaffars
cú pháp của bạn sai ở đây. nó là git rm test.txt và đây là liên kết đến câu trả lời toàn diện hơn stackoverflow.com/questions/12661306/… - Linnea Huxford


Xóa khoảng trống cuối trong .gitignore

Ngoài ra, hãy đảm bảo rằng bạn không có khoảng trắng ở cuối trong tệp .gitignore của bạn. Tôi đã nhận được câu hỏi này bởi vì tôi đã tìm kiếm một câu trả lời, sau đó tôi đã có một cảm giác vui, tôi nên mở trình soạn thảo thay vì chỉ cat'ing .gitignore. Đã xóa thêm một dấu cách khỏi phần cuối và poof nó hoạt dộng bây giờ :)


50
2017-07-15 07:22



Tôi đã có chính xác cùng một vấn đề,: P. Tôi cũng đã nhận được câu hỏi này vì điều đó. Điều tốt bạn có tài liệu này ở đây. +1 - Hindol
Nếu như tôi bạn sử dụng vi để nhanh chóng chỉnh sửa .gitignore sử dụng ': set list' để hiển thị khoảng trắng. - Sam Giles
Điều này xảy ra với tôi khi tôi làm echo node_modules >> .gitignore (ít nhất là trên cửa sổ) - Khôi
Trong nhiều tuần, tôi đã thất vọng với điều này cho đến khi tôi thấy bài đăng khoảng trắng của bạn. Cảm ơn, đã khắc phục sự cố của tôi. - Blazes


tôi đã làm theo các bước này

git rm -r --cached .
git add .
git reset HEAD

sau đó, git xóa tất cả các tập tin (* .swp trong trường hợp của tôi) mà nên được bỏ qua.


40
2018-03-02 09:00



hãy cẩn thận với điều đó, vì nó giả định bạn muốn thêm tất cả các tệp ngoại trừ những gì bị bỏ qua và thường không phải như vậy - RoeeK


Nếu bạn muốn ngừng theo dõi tệp mà không xóa tệp khỏi hệ thống cục bộ của mình, tôi thích bỏ qua tệp này config/database.yml tập tin. Chỉ cần thử:

git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.

bây giờ, hãy thêm tệp này vào .gitignorevà cam kết các thay đổi. Và từ giờ trở đi, mọi thay đổi được thực hiện đối với config / database.yml sẽ không bị git theo dõi.

$ echo config/database.yml >> .gitignore

Cảm ơn


37
2017-08-21 14:20





Để chỉ xóa một vài tệp cụ thể không bị theo dõi:

git update-index --assume-unchanged path/to/file

Nếu bạn muốn bắt đầu theo dõi lại lần nữa:

git update-index --no-assume-unchanged path/to/file                      

28
2018-04-17 07:21