Câu hỏi Làm thế nào để loại bỏ các tập tin địa phương (untracked) từ cây làm việc Git hiện tại?


Làm cách nào để xóa các tệp cục bộ không được theo dõi khỏi cây đang hoạt động hiện tại của bạn?


5796
2017-09-14 09:06


gốc


Tấm git cheat tương tác này ndpsoftware.com/git-cheatsheet.html hiển thị không gian làm việc git (google cung cấp cho bạn kết quả tốt hơn với "không gian làm việc" hơn "bản sao làm việc"). - qneill
Lưu ý: nếu bạn chỉ muốn xóa một số các tập tin không được theo dõi, nhưng không phải tất cả, git clean bây giờ là một tương tác chế độ! Xem câu trả lời của tôi cho câu hỏi khác này: git 1.8.4+ - VonC
Lưu ý rằng bạn không xóa các tệp khỏi nhánh git, vì nhánh là một tham chiếu đến một cam kết và do đó không chứa các tệp không được theo dõi. Chúng chỉ xuất hiện trong thư mục làm việc và không liên quan gì đến các nhánh. Đó có lẽ chỉ là làm rõ thuật ngữ. - Pavel Šimerda
Trước khi bạn đăng câu trả lời mới, hãy xem xét đã có hơn 25 câu trả lời cho câu hỏi này. Hãy chắc chắn rằng câu trả lời của bạn đóng góp những gì không nằm trong số các câu trả lời hiện có - Sazzad Hissain Khan
Để làm rõ sự hiểu biết của người mới bắt đầu và những người mới trong trạng thái git - chạy git và nếu nó hiển thị một tập tin không được báo trước, và bạn không muốn tập tin đó trong repo, bạn có thể vào hệ thống tập tin của bạn và xóa hoặc di chuyển nó . Điều này sẽ không làm bất cứ điều gì xấu cho repo địa phương của bạn hoặc để Git. Bạn cũng có thể dùng git clean hoặc một số biến thể trong các câu trả lời bên dưới, bao gồm cả phiên bản tương tác để xóa các tệp chỉ chọn lọc, nhưng chế độ tương tác có thể tẻ nhạt. Dù bạn làm gì, hãy đảm bảo bạn hiểu git clean sẽ xóa hoặc sử dụng --dry-run để nó cho bạn biết mà không xóa bất cứ điều gì. - LightCC


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


Theo tài liệu Git git sạch

Loại bỏ các tập tin không được theo dõi từ cây làm việc


Bước 1 là hiển thị những gì sẽ bị xóa bằng cách sử dụng -n Tùy chọn:

git clean -n

Bước sạch - hãy cẩn thận: điều này sẽ xóa các tập tin:

git clean -f
  • Để xóa thư mục, hãy chạy git clean -f -d hoặc là git clean -fd
  • Để xóa các tệp bị bỏ qua, hãy chạy git clean -f -X hoặc là git clean -fX
  • Để xóa các tệp bị bỏ qua và không bị bỏ qua, hãy chạy git clean -f -x hoặc là git clean -fx

chú thích sự khác biệt của trường hợp trên X cho hai lệnh sau.

Nếu clean.requireForce được đặt thành "true" (mặc định) trong cấu hình của bạn, bạn cần chỉ định -f nếu không thì không có gì thực sự xảy ra.

Một lần nữa nhìn thấy git-clean tài liệu để biết thêm thông tin.

Tùy chọn

-f

--lực lượng

Nếu biến cấu hình Git clean.requireForce không được đặt thành false, git clean sẽ từ chối chạy trừ khi được đưa ra -f, -n hoặc -i.

-x

Không sử dụng quy tắc bỏ qua chuẩn đọc từ .gitignore (trên mỗi thư mục) và $ GIT_DIR / info / exclude, nhưng vẫn sử dụng quy tắc bỏ qua được cung cấp với tùy chọn -e. Điều này cho phép xóa tất cả các tệp không được theo dõi, bao gồm các sản phẩm xây dựng. Điều này có thể được sử dụng (có thể kết hợp với git reset) để tạo một thư mục làm việc nguyên sơ để kiểm tra một bản dựng sạch.

-X

Chỉ xóa các tệp bị Git bỏ qua. Điều này có thể hữu ích để xây dựng lại mọi thứ từ đầu, nhưng giữ các tệp được tạo theo cách thủ công.

-n

- chạy trốn

Không thực sự xóa bất kỳ thứ gì, chỉ hiển thị những gì sẽ được thực hiện.

-d

Xóa các thư mục không được theo dõi ngoài các tệp không được theo dõi. Nếu một thư mục không được quản lý được quản lý bởi một kho lưu trữ Git khác, nó sẽ không bị loại bỏ theo mặc định. Sử dụng tùy chọn -f hai lần nếu bạn thực sự muốn xóa một thư mục như vậy.


7613
2018-05-26 20:59



git clean -f chỉ hoạt động trong thư mục mà nó được gọi (và các thư mục con). Nếu bạn muốn làm sạch toàn bộ bản sao làm việc, bạn nên gọi nó trong thư mục gốc của nó. - Eduardo Bezerra
Nó cũng loại bỏ tất cả các tập tin bên trong .gitignore. Tôi chỉ cần xóa các tệp / thư mục mới và không có trong .gitignore - Kostanos
@Kostanos Nếu bạn không muốn xóa các tệp có trong .gitignore, thì không cung cấp cờ -x. - Lo-Tan
git clean -f :/ hoạt động như thể bạn đã chạy nó trong thư mục repo gốc. Xem thêm các câu trả lời sau cũng tính toán các mô-đun con với git clean -ffxd :/ - here
@Michelle git clean -xfd S also cũng XÓA TẤT CẢ CÁC LỌC TỪ NGAY LẬP TỨC CỦA BẠN .gitignore và chúng không thể phục hồi được - thedanotto


Sử dụng git clean -f -d để đảm bảo rằng thư mục cũng bị xóa.

Sau đó, bạn có thể kiểm tra xem tệp của bạn có thực sự biến mất hay không git status.


817
2017-12-30 20:12



Như đã nói, tốt để chạy nó với git clean -n -d - Ms01
Điều tương tự cũng phải làm git clean -nd và git clean -fd. - Micer


Tôi ngạc nhiên không ai đề cập đến điều này trước đây:

git clean -i

Đó là viết tắt của tương tác và bạn sẽ có được một cái nhìn tổng quan nhanh về những gì sẽ bị xóa cung cấp cho bạn khả năng bao gồm / loại trừ các tập tin bị ảnh hưởng. Nhìn chung, vẫn nhanh hơn chạy bắt buộc --dry-run trước khi làm sạch thực sự.

Bạn sẽ phải quăng vào -d nếu bạn cũng muốn quản lý các thư mục trống. Cuối cùng, nó làm cho một bí danh tốt đẹp:

git iclean

Điều đó đang được nói, việc nắm giữ thêm các lệnh tương tác có thể gây mệt mỏi cho người dùng có kinh nghiệm. Những ngày này tôi chỉ sử dụng đã được đề cập git clean -fd 


397
2017-09-14 09:09



got: error: unknown switch `i ' - pal4life
@ pal4life Nó đã được thêm vào trong 1.8.4, bạn có thể đang chạy một phiên bản cũ của git? github.com/git/git/blob/master/Documentation/RelNotes/1.8.4.txt - Mattias Backman
@ SystemystemFrank, Không sử dụng bí danh, họ không thực sự vượt quá 1 người .... - Pacerier


git-clean - Loại bỏ các tập tin không được theo dõi từ cây làm việc


387
2018-01-25 12:24





Nếu thư mục không được theo dõi là kho lưu trữ git của riêng nó (ví dụ: submodule), bạn cần sử dụng -f hai lần:

git clean -d -f -f


200
2018-06-03 12:16



BTW, điều này được viết bằng tài liệu : Git sẽ từ chối xóa các thư mục với thư mục con hoặc thư mục phụ .git trừ khi có lệnh thứ hai. Nhưng dù gì cũng cảm ơn! - Maxim Suslov


Cách đơn giản để xóa các tập tin không được theo dõi

Để loại bỏ tất cả các tập tin untracked, đơn giản   cách là thêm tất cả chúng trước và đặt lại reponhư sau

git add --all
git reset --hard HEAD


145
2018-01-11 00:41



Bạn có thể thay thế git add --allbởi git add .. Vì vậy, bạn có thể làm điều đó một cách ngắn hơn trên đường truyền git add . && git reset --hard HEAD  (được rất cẩn thận với lệnh này). - RousseauAlexandre
Tại sao lại sử dụng điều này git clean? - user2864740
Bởi vì git clean dường như cũng xóa mọi thứ bị bỏ qua. Nó vừa xóa của tôi node_modules thư mục. Thực hiện việc này trước tiên sẽ thực hiện tất cả các tệp trừ các tệp bị bỏ qua và sau đó xóa chúng bằng cách đặt lại. Các tệp bị bỏ qua sẽ không được chạm vào. - Andreas
@Andreas nó không xóa các tập tin bị bỏ qua cho tôi (git 2.14.1). Bạn nên chạy đi git clean -n trước khi thực hiện xóa thực tế (hoặc sử dụng git clean -i). - Qw3ry
git clean chỉ xóa các tệp bị bỏ qua nếu bạn sử dụng một trong hai -x hoặc là -X tùy chọn, nếu không nó chỉ xóa các tập tin không được theo dõi. - doubleDown


tôi thích git stash save -u bởi vì bạn có thể hoàn tác tất cả git stash pop.

EDIT: Ngoài ra tôi đã tìm thấy cách hiển thị tệp không được theo dõi trong một stash (ví dụ: git show stash@{0}^3) https://stackoverflow.com/a/12681856/338986


118
2017-11-25 14:16



Bạn có thể giải thích -u trên stash? Tôi không làm theo cách hoạt động khác với lưu trữ git stash. Tôi đã thử nó và nó đã hoạt động. Nhìn vào tài liệu git và không thể tìm thấy nó ở đó. - Winnemucca
-u tương đương với --include-untracked. Bạn có thể tìm trợ giúp với git help stash. - hiroshi
@hiroshi Cảm ơn! sau khi thử mọi giải pháp darn từ hàng tá người khác nhau thì đây là một giải pháp cuối cùng đã làm ... Ngay cả một stit git đã làm nada. Việc lưu - u đã chăm sóc của untracked. thiết lập lại lực lượng cứng / sạch / etc không ai trong số này đã làm bất cứ điều gì cho tôi. - killjoy


Đây là những gì tôi luôn sử dụng:

git clean -fdx

Đối với một dự án rất lớn, bạn có thể muốn chạy nó một vài lần.


92
2017-09-14 09:08



Bạn có thể giải thích nhận xét về các dự án lớn không? - Martin
@Martin Một trong những dự án mà tôi đang làm là +8 tuổi với 80 nhà phát triển tích cực mã hóa. Git đôi khi không làm sạch nó trên pass đầu tiên. - Oscar Fraxedas