Làm cách nào để xóa tệp khỏi chỉ mục (= staging area = cache) mà không xóa tệp khỏi hệ thống tệp?
Làm cách nào để xóa tệp khỏi chỉ mục (= staging area = cache) mà không xóa tệp khỏi hệ thống tệp?
Câu trả lời:
Bạn muốn:
git rm --cached [file]
Nếu bạn bỏ qua --cached
tùy chọn, nó cũng sẽ xóa nó khỏi cây làm việc. git rm
an toàn hơn một chút git reset
, bởi vì bạn sẽ được cảnh báo nếu nội dung theo giai đoạn không khớp với đầu của nhánh hoặc tệp trên đĩa. (Nếu không, bạn phải thêm --force
.)
git rm --cached
để xóa chúng khỏi repo, thêm các tệp hoặc thư mục có liên quan vào .gitignore, giai đoạn và cam kết như bình thường. Chúng sẽ biến mất khỏi repo nhưng vẫn còn nguyên vẹn trong cây địa phương của bạn và bạn sẽ không vô tình kiểm tra lại chúng.
Điều này sẽ loại bỏ <file> cho bạn (mà không xóa hoặc sửa đổi tệp):
git reset <file>
HEAD
.
HEAD
!
git reset HEAD <file>
để xóa một tập tin cụ thể khỏi chỉ mục.
và
git reset HEAD
để loại bỏ tất cả các tập tin được lập chỉ mục.
Tùy thuộc vào quy trình làm việc của bạn, đây có thể là điều mà bạn cần hiếm khi đủ để cố gắng tìm ra giải pháp dòng lệnh (trừ khi bạn tình cờ làm việc mà không có giao diện đồ họa vì một số lý do).
Chỉ cần sử dụng một trong các công cụ dựa trên GUI hỗ trợ quản lý chỉ mục, ví dụ:
git gui
<- sử dụng khung cửa sổ Tk - kiểu tương tự như gitk
git cola
<- giao diện GUI kiểu hiện đại hơnNhững thứ này cho phép bạn di chuyển các tệp vào và ra khỏi chỉ mục bằng cách bấm và nhấp. Họ thậm chí còn có hỗ trợ để chọn và di chuyển các phần của tệp (thay đổi riêng lẻ) đến và từ chỉ mục.
Làm thế nào về một quan điểm khác nhau: Nếu bạn gây rối trong khi sử dụng một trong các lệnh được đề xuất, khá khó hiểu:
git rm --cached [file]
git reset HEAD <file>
... Bạn có cơ hội thực sự mất dữ liệu - hoặc ít nhất là làm cho nó khó tìm. Trừ khi bạn thực sự cần phải làm điều này với tần suất rất cao, sử dụng công cụ GUI có thể sẽ an toàn hơn .
Dựa trên các nhận xét và phiếu bầu, tôi đã nhận ra rằng rất nhiều người sử dụng chỉ số mọi lúc. Tôi không. Đây là cách thực hiện:
git commit -a
git commit (list of files)
git commit -a
sau đó sửa đổi quagit gui
git difftool --dir-diff --tool=meld
git commit -a
. Khi tôi trả lời câu hỏi này, đó là vì tôi đã làm (một kỳ lạ) " cherry pick ngược đưa các tệp vào chỉ mục cho bạn, nhưng tôi muốn chỉnh sửa một tệp trước khi cam kết. Tôi lấy tập tin ra khỏi chỉ mục trong khi tôi chỉnh sửa nó để diffs hoạt động theo cách mà tôi đã từng sử dụng.
rm
ngay lập tức nhưng trước tiên tôi nghĩ rằng các nhánh chuyển đổi sẽ không giết chết thư mục bị bỏ qua . nhưng ... tôi sử dụng công cụ "gui dựa" github đủ tốt cho tôi và hỗ trợ một số quản lý chỉ mục trừ khi nó không hỗ trợ điều này. Vì vậy, những gì, tôi nên sử dụng 2 gui cho sử dụng hẹp? vẫn không thể đồng ý với câu trả lời.