Hoàn tác git thêm <dir> chà?


185

Tôi đã thêm nhầm tệp bằng cách sử dụng lệnh "git add dir". Tôi chưa chạy "git commit". Có cách nào để loại bỏ thư mục này và mọi thứ có trong nó khỏi cam kết không?

Tôi đã thử git reset dir, nhưng nó không hoạt động. Rõ ràng git reset filelà cách để hoàn tác nó. Nhưng tôi có rất nhiều tập tin và rất ít thời gian.


6
git reset <path>cập nhật chỉ mục cho đường dẫn đó sao cho khớp HEAD(cam kết hiện tại). Nó không chạm vào cây làm việc.
Cascabel

Câu trả lời:


279

Để xóa một thư mục và mọi thứ bên trong nó khỏi chỉ mục,

git rm --cached -r dir

Công --cachedtắc này chỉ git rmhoạt động trên chỉ mục và không chạm vào bản sao làm việc. Việc -rchuyển đổi làm cho nó đệ quy.


12
"Để xóa toàn bộ thư mục theo giai đoạn khỏi chỉ mục" sẽ là một lời giải thích tốt hơn một chút về lệnh git, vì đối với những người mới bắt đầu git như tôi, lệnh này trông rất giống nếu nó thậm chí có thể xóa thư mục trên hệ thống tệp. Chỉ là vấn đề của hương vị.
Sascha Gottfried

1
Đó là lý do tại sao tôi đã in đậm công --cachedtắc. Tuy nhiên, tôi đã chỉnh sửa câu trả lời để đủ điều kiện chỉ áp dụng cho chỉ mục.
Aristotle Pagaltzis

@SaschaGottfried cảm ơn vì đã làm rõ, ban đầu tôi rất sợ ngay cả khi chỉnh sửa nhưng bình luận của bạn đã làm rõ :)
Max von Hippel

tôi gần như bị xóa toàn bộ thư mục của tôi: S sau này ... làm một git reset HEAD foldertất cả mọi thứ cố định ... nhưng trước khi làm điều này, làm một git status folder, và chắc chắn rằng nó nói rằng nó 'xóa' tất cả các file vào thư mục đó
Bengalaa

21

Bạn sẽ muốn sử dụng git rm --cached -r <dir>. lệnh này sẽ loại bỏ nội dung thư mục theo giai đoạn khỏi chỉ mục.

nếu thư mục đã được theo dõi, bạn phải tìm các tệp mới và cũ theo cách thủ công và bỏ qua chúng

Có thể chạy git reset <dir>sau đó để thiết lập lại các tệp hiện có (và đã được theo dõi) trong thư mục.


Cập nhật 2019:

Đơn giản chỉ cần chạy git reset directory, nó sẽ bỏ qua tất cả các tệp mới được thêm vào.


Một git reset <dir>mình không đủ sao?
Tunach

@Bananach Tôi mới thử và có vẻ như, vâng, git reset <dir>cũng sẽ hoạt động tốt. Câu trả lời là từ năm 2011, vì vậy tôi không chắc điều đó đã hoạt động 8 năm trước chưa. Tôi sẽ cập nhật câu trả lời. Cảm ơn các gợi ý!
knittl


11

Thư mục Unstage

$ git reset <dir>

Unstages tất cả các tập tin và thư mục tôi dàn dựng với:

$ git add <dir>

Xác nhận thư mục chưa được phân loại

Để xác nhận việc xóa thư mục và nội dung của nó khỏi dàn (nghĩa là "Thay đổi được cam kết"), hãy chạy như sau:

$ git status

hoặc là

$ git diff --staged --name-only 

để xác nhận rằng không có thư mục hoặc tập tin nào được dàn dựng trước đó vẫn được dàn dựng.


2

Một lệnh đơn giản để xóa tệp / thư mục theo giai đoạn chưa được cam kết là - git restore --staged <dir>.

nhập mô tả hình ảnh ở đây

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.