Tạm thời mở các tệp từ git


449

Tôi đã thiết lập một git cục bộ trên máy của tôi. Khi tôi khởi tạo git, tôi đã thêm các lib và nhị phân được biên dịch trước. Tuy nhiên, bây giờ trong quá trình phát triển của tôi, tôi không muốn kiểm tra các tệp đó không liên tục. Tôi không muốn xóa các tập tin này khỏi repo. Có cách nào để không theo dõi các tệp này cho đến khi tôi hoàn thành sự phát triển của mình. (Tôi nghĩ rằng tôi không thể sử dụng .gitignore vì nó chỉ hoạt động đối với những tệp không có trong git. Tôi muốn tạm thời tắt theo dõi tệp.)



Câu trả lời:


723

git update-index nên làm những gì bạn muốn

Điều này sẽ cho git bạn muốn bắt đầu bỏ qua các thay đổi đối với tệp
git update-index --assume-unchanged path/to/file

Khi bạn muốn bắt đầu theo dõi lại
git update-index --no-assume-unchanged path/to/file

Tài liệu Github: cập nhật chỉ mục


3
Cuối cùng, một lệnh thực sự hoạt động cho tập tin dev vô tình cam kết của tôi, cảm ơn :)
Richard de Wit

15
Tại sao không git rm -r --cached <file>?
Ehsan

23
@Ehsan dường như git rm --cachedsẽ dẫn đến việc xóa các bản sao cục bộ trên các máy khác, trong đó cùng một chi nhánh được kiểm tra, trong lần kéo tiếp theo của họ. Xem arlocarreon.com/blog/git/ và đặc biệt là cuộc thảo luận bên dưới nó.
mit

3
Không hoạt động đối với tôi, khi tôi thay đổi tệp, nó vẫn được thêm vào các thay đổi được bao gồm. Tôi có thể loại trừ, nhưng rồi đến một lúc nào đó có lẽ nó sẽ được thêm vào một cách tình cờ.
MrFox

8
giả định không thay đổi không có nghĩa cho mục đích này. Có thể muốn đọc chủ đề
Appy

264

bạn có thể giữ các tập tin của bạn không bị theo dõi sau

git rm -r --cached <file>

thêm tập tin của bạn với

git add -u

họ đẩy hoặc làm bất cứ điều gì bạn muốn.


19
Đó thực sự là câu trả lời đúng theo: git-scm.com/book/en/v2/ Kẻ
Ehsan

git rm --cached .DS_Store Sau đó, nó in rm '../.DS_Store'Và tập tin cục bộ bị xóa ??! ( git version 2.6.4 (Apple Git-63))
Weishi Zeng

Có câu trả lời ở đây stackoverflow.com/questions/6919121/
Khăn

4
Đây không phải là câu trả lời đúng bởi vì điều này sẽ loại bỏ các tập tin trong nguồn. OP muốn bỏ qua các thay đổi cục bộ của tệp đó, không xóa hoàn toàn theo dõi cho nó
cjsimon

2
CẢNH BÁO: nó cũng sẽ xóa các tệp bạn muốn bỏ theo dõi. Giải pháp là sao chép tất cả các tệp ở đâu đó và sao chép chúng lại sau khi xác nhận.
psad

111
git rm --cached

Tuy nhiên, bạn không nên cam kết các tệp nhị phân đã biên dịch và các phụ thuộc bên ngoài ở vị trí đầu tiên. Sử dụng một công cụ như Bundler để kéo chúng vào thay thế.


2
Đừng quên tùy chọn -r (đệ quy) cho các thư mục: git rm -r --cached
Anatoliy Shuba


7

Cuốn sách git đề cập đến điều này trong phần 2.4: "Hoàn tác mọi thứ". Về cơ bản, những gì bạn phải làm là đặt lại trạng thái của chỉ mục cho một số tệp trở về trạng thái CHÍNH, nghĩa là ở trạng thái thanh toán mới nhất (hoặc cam kết). Điều này hoàn tác việc sắp xếp tập tin vào chỉ mục hiện tại. Lệnh cho nhiệm vụ này là git reset. [1]

Vì vậy, lệnh bạn phải thực thi là:

git reset HEAD /path/to/file

Các phiên bản mới hơn của git (tôi tin từ 1.6 trở lên) đưa ra lệnh này (và nhiều hơn nữa) như một mẹo khi thực hiện git status. Các phiên bản này rất thân thiện với người dùng. Mẹo cá nhân: nếu bạn chỉ dàn dựng một vài tệp, hãy sử dụng git add -i. Điều này sẽ khởi chạy công cụ dàn tương tác, làm cho mọi thứ đặc biệt dễ dàng. Ngoài ra, tôi rất khuyên bạn nên đọc cuốn sách này, vì nó rất rõ ràng về việc sử dụng git trong các tình huống thực tế.

[1] http://www.git-scm.com/book


Tôi đồng ý rằng đó git reset [file]là cách đơn giản nhất để bỏ tập tin.
Quang phổ

18
hoàn tác và không bị theo dõi là những điều khác nhau
Jaime Sangcap

6

Không phải là một câu trả lời cho câu hỏi ban đầu. Nhưng điều này có thể giúp một ai đó.

Để xem những thay đổi bạn đã thực hiện ( biết tệp nào được đánh dấu là - không thay đổi )

git ls-files -v

Danh sách kết quả của các tệp sẽ có tiền tố với một ký tự (ví dụ: H hoặc h) Nếu đó là chữ thường (tức là h) thì tệp được đánh dấu - không thay đổi


5

Tôi giả sử rằng bạn đang hỏi cách xóa TẤT CẢ các tệp trong thư mục bản dựng hoặc thư mục bin, thay vì chọn từng tệp riêng biệt.

Bạn có thể sử dụng lệnh này:

git rm -r -f /build\*

Đảm bảo rằng bạn đang ở trong thư mục mẹ của thư mục bản dựng.
Lệnh này sẽ, "đệ quy" xóa tất cả các tệp trong bin / hoặc build / thư mục. Theo từ xóa, tôi có nghĩa là git sẽ giả vờ rằng các tệp đó bị "xóa" và các tệp đó sẽ không được theo dõi. Git thực sự đánh dấu các tập tin ở chế độ xóa.

Hãy chắc chắn rằng bạn đã có .gitignore sẵn sàng cho các cam kết sắp tới.
Tài liệu: git rm


1

git reset [tập tin]

Lấy tập tin trở lại từ khu vực tổ chức vào thư mục làm việc

Tôi thường quên thêm các mô-đun nút của mình vào tệp .gitignore, điều này giải quyết vấn đề đó.


1

Điều này làm việc cho tôi

git đặt lại tên 'tên tệp'


1

Để loại bỏ tất cả các tập tin Untrack. Hãy thử lệnh đầu cuối này

 git clean -fdx

Nó sẽ xóa các tập tin khỏi đĩa chứ không phải từ lịch sử git.
Leonardo

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.