Làm thế nào để loại bỏ các tập tin từ khu vực dàn git?


550

Tôi đã thực hiện thay đổi đối với một số tệp trong repo cục bộ của mình và sau đó tôi đã làm git add -Ađiều mà tôi nghĩ rằng đã thêm quá nhiều tệp vào khu vực tổ chức. Làm cách nào để xóa tất cả các tệp khỏi khu vực tổ chức?

Sau khi tôi làm điều đó, tôi sẽ chỉ làm bằng tay git add "filename".


2
Hy vọng rằng bạn đang tìm kiếm điều này: stackoverflow.com/questions/1505948/ từ
sumitb.mdi

27
git statusđã cho bạn biết chính xác những gì cần làm nếu bạn muốn bỏ tập tin.
Michael Foukarakis

6
@MichaelFoukarakis trạng thái git không hữu ích nếu bạn muốn hủy kích hoạt toàn bộ thư mục nếu nó làm ngập thiết bị đầu cuối với đầu ra (chẳng hạn như node_modules)
whiterook6 28/07/14

2
Trong tương lai, thay vì thêm tất cả, bạn có thể muốn thoải mái với git add -phoặc git add --patch(chúng giống nhau). Cờ đó cho phép bạn tương tác chọn các tệp hoặc các thay đổi riêng lẻ mà bạn muốn thực hiện - sau đó bạn có thể nhận được nhiều chi tiết hơn với công việc bạn đưa vào cam kết.
Gabe

Câu trả lời:


690

Bạn có thể hủy tập tin khỏi chỉ mục bằng cách sử dụng

git reset HEAD -- path/to/file

Giống như git add, bạn có thể hủy bỏ các tệp đệ quy theo thư mục và cứ thế, để hủy bỏ mọi thứ cùng một lúc, hãy chạy tệp này từ thư mục gốc của kho lưu trữ của bạn:

git reset HEAD -- .

Ngoài ra, để tham khảo trong tương lai, đầu ra của git statussẽ cho bạn biết các lệnh bạn cần chạy để di chuyển tệp từ trạng thái này sang trạng thái khác.


5
$ git reset HEAD -- .sản xuất fatal: Failed to resolve 'HEAD' as a valid ref.Lưu ý rằng tôi không bao giờ thực hiện bất kỳ cam kết nào; lần đầu tiên git addsaugit init
Patrizio Bertoni

5
Bạn cũng có thể sử dụng git reset @.
alex

@alex Có tốt hơn chỉ đơn giản git reset?
Antony Hatchkins

7
@AntonyHatchkins @đồng nghĩa với HEAD.
alex

Hoàn toàn làm việc cho tôi, cảm ơn!
wayneseymour

305

Sử dụng

git reset

để unstage tất cả các tập tin dàn dựng.


3
Tôi có thể hỏi làm thế nào điều này khác với git reset HEAD --hoặc nó chỉ đơn giản là một cách ngắn gọn hơn để thực hiện cùng một hoạt động?
ProNotion

1
@ProNotion Đặt lại sử dụng HEADtheo mặc định. Mục đích của những người --trong bạn là git reset HEAD --gì?
Antony Hatchkins

@AntonyHatchkins cần được theo sau bởi một dấu chấm (dấu chấm) đầy đủ và được lấy từ ví dụ trong câu trả lời được chấp nhận.
ProNotion

11
@ProNotion Xin lỗi tôi đã hiểu lầm bạn. git reset HEAD -- .khác ở chỗ nó chỉ đặt lại các tệp trong thư mục hiện tại và bên dưới trong khi git resetđặt lại tất cả các tệp trong dự án.
Antony Hatchkins

101

Nếu bạn đã cam kết một loạt các tệp không mong muốn, bạn có thể hủy kích hoạt chúng và yêu cầu git đánh dấu chúng là đã xóa (mà không thực sự xóa chúng) với

git rm --cached -r .

--cachednói với nó để loại bỏ các đường dẫn từ dàn và chỉ mục mà không loại bỏ các tệp và -rhoạt động trên các thư mục đệ quy. Sau đó, bạn có thể git addbất kỳ tệp nào bạn muốn tiếp tục theo dõi.


Tôi cho rằng đó là "git rm -."
Alexander Mills

1
có một lỗi nghiêm trọng về việc không xóa các tệp bằng "git rm -."
Alexander Mills

@AlexMills Tôi cập nhật câu trả lời của mình để đề cập đến các tùy chọn thực tế rmđể hủy bỏ tất cả các tệp.
Tối đa

2
Tôi đã thử điều này trên một tệp số ít như thế này: "git rm --cached my / file.java" và tôi thấy tệp đó vẫn nằm trong khu vực tổ chức, nhưng đã bị xóa! @Max khi bạn chạy lệnh này là các tệp của bạn thực sự bị xóa hoặc chỉ chưa được phân loại? Nếu bạn không tìm kiếm hành vi đó tôi sẽ đi với câu trả lời.
OrwellHindenberg

@OrwellHindenberg cảm ơn bạn đã chỉ ra điều đó! --cachedthực sự là dừng theo dõi các tệp mà bạn đã cam kết. Vì vậy, tập tin không thực sự bị xóa, nhưng git nghĩ rằng nó là. Tôi đã làm rõ điều này trong câu trả lời của tôi.
Tối đa

30

Bạn đã có thể sử dụng

git reset HEAD

sau đó thêm các tệp cụ thể mà bạn muốn

git add [directory/]filename

Bạn có thể thêm tham số -x và các tệp bị bỏ qua cũng sẽ bị xóa. Nó hữu ích nếu bạn làm hỏng với .gitignore của bạn và có một cái gì đó hữu ích ở đó (như trong trường hợp của tôi). ( git-scm.com/docs/git-clean )
Keeprock

1
Với các thư mục dư thừa, git statussẽ cho bạn biết thư mục làm việc sạch sẽ - dối trá! git clean -dfđã làm việc đó, cảm ơn.
Leo

5
Lưu ý rằng git clean -dfsẽ xóa các tập tin vĩnh viễn. Trên các hệ thống giống như UNIX, nó sẽ gọi unlink()và các tệp đã xóa của bạn sẽ không thể phục hồi được.
Hanxue

11
OP hỏi về việc sắp xếp các tập tin. Bạn khuyên anh ta xóa các tập tin. Tôi đề nghị bạn đọc về khu vực tổ chức trước khi trả lời.
Antony Hatchkins

Cảm ơn bạn đã xóa toàn bộ dự án chưa lưu của tôi.
Vansuita Jr.

7

Như đã lưu ý trong các câu trả lời khác, bạn nên sử dụng git reset. Điều này sẽ hoàn tác hành động của git add -A.

Lưu ý: git reset tương đương với git reset --mixedcái này

Đặt lại chỉ mục nhưng không phải cây làm việc (nghĩa là các tệp đã thay đổi được giữ nguyên nhưng không được đánh dấu cho cam kết) và báo cáo những gì chưa được cập nhật. Đây là hành động mặc định. [ đặt lại git ]


2
.. và để xóa một tệp duy nhất khỏi khu vực tổ chức, bạn có thể làmgit reset filenameToNotCommit
SherylHohman

5

Bây giờ tại v2.24.0 gợi ý

git restore --staged .

để tập tin unstage.


1

Bạn có thể đặt lại khu vực tổ chức theo một số cách:

  1. Đặt lại CHÍNH và thêm tất cả các tệp cần thiết để đăng ký lại như sau:

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    

Điều gì làm cho câu trả lời này khác với sáu câu trả lời hiện có?
Antony Hatchkins

1

Để xóa tất cả các tệp khỏi sử dụng khu vực tổ chức -
git reset
Để xóa sử dụng tệp cụ thể -
git reset "File path"


1

sử dụng

git reset HEAD

Điều này sẽ loại bỏ tất cả các tập tin từ khu vực tổ chức


1

Nếu các tệp không mong muốn được thêm vào khu vực tổ chức nhưng chưa được cam kết, thì thiết lập lại đơn giản sẽ thực hiện công việc:

$ git reset HEAD file
# Or everything
$ git reset HEAD .

Để chỉ xóa các thay đổi chưa được sắp xếp trong thư mục làm việc hiện tại, hãy sử dụng:

git checkout -- .

0

Sử dụng "git reset HEAD <file>... " để quay phim

ví dụ: để unstage tất cả các tập tin

git reset HEAD .

để unstage một tập tin

git reset HEAD nameFile.txt

-3

Tôi đã thử tất cả các phương pháp này nhưng không có phương pháp nào hiệu quả với tôi. Tôi đã xóa tệp .git bằng cách sử dụng rm -rf .gitmẫu kho lưu trữ cục bộ và sau đó lại thực hiện git initgit addcác lệnh thường quy. Nó đã làm việc.


4
Đọc tài liệu git thường bổ ích hơn so với làm theo lời khuyên từ xkcd.com/1597 ;)
Antony Hatchkins

1
Có thể bạn đã có một vấn đề toàn vẹn trong trường hợp cụ thể của bạn và đây là tùy chọn còn lại, nhưng nó không được khuyến khích.
Shad

Xin đừng làm điều này, bạn sẽ phá hủy toàn bộ repo git của bạn.
Lennart Rolland

-5

Cách tốt nhất để hoàn tác tệp của bạn đã có trong khu vực tổ chức là git reset - cho phép đưa các tệp được sắp xếp của bạn trở lại. Bây giờ cẩn thận, điều đó sẽ loại bỏ các thay đổi theo giai đoạn và không theo giai đoạn.


2
Điều này là sai và nguy hiểm !!! OP muốn "chỉ thêm thủ công" các tệp trở lại sau đó nhưng --hardxóa chúng mãi mãi.
Antony Hatchkins
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.