Cách xóa các tệp cục bộ (không bị theo dõi) khỏi cây làm việc Git hiện tại


6842

Làm thế nào để bạn xóa các tệp cục bộ không bị theo dõi khỏi cây làm việc hiện tại của bạn?


86
Bảng git cheat tương tác này ndpsoftware.com/git-chcoateet.html hiển thị không gian làm việc của git (google cung cấp cho bạn kết quả tốt hơn với "không gian làm việc" so với "bản sao làm việc").
qneill

28
Lưu ý: nếu bạn chỉ muốn xóa một số tệp không bị theo dõi, nhưng không phải tất cả chúng , git cleangiờ đây đã có chế độ tương tác ! Xem câu trả lời của tôi cho câu hỏi khác này : git 1.8.4+
VonC

17
Lưu ý rằng bạn không xóa các tệp khỏi nhánh git, vì nhánh là tham chiếu đến một cam kết và do đó không chứa các tệp không bị theo dõi. Chúng chỉ hiện diệ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

6
Để làm rõ về sự hiểu biết của người không quen và những người mới sử dụng trạng thái git - chạy Git và nếu nó hiển thị một tệp là không bị theo dõi và bạn không muốn tệp đó trong repo, bạn có thể truy cập hệ thống tệp của mình 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ể sử dụng git cleanhoặc một số biến thể trong các câu trả lời bên dưới, bao gồm phiên bản tương tác để xóa chỉ các tệp chọn lọc, nhưng chế độ tương tác có thể tẻ nhạt. Dù bạn làm gì, hãy chắc chắn rằng bạn hiểu những gì git cleansẽ xóa hoặc sử dụng --dry-runđể nó nói với bạn mà không xóa bất cứ điều gì.
LightCC

4
Nếu các tệp chưa được theo dõi, bạn không thể xóa chúng mà không có git? rm files-to-be-deleted
mhatch

Câu trả lời:


8734

git-clean - Loại bỏ các tệp không bị theo dõi khỏi cây làm việc

Tóm tắc

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…​

Sự miêu tả

Làm sạch cây làm việc bằng cách loại bỏ đệ quy các tệp không thuộc kiểm soát phiên bản, bắt đầu từ thư mục hiện tại .

Thông thường, chỉ các tệp không xác định với Git được xóa, nhưng nếu -xtùy chọn được chỉ định, các tệp bị bỏ qua cũng bị xóa. Điều này có thể, ví dụ, có thể hữu ích để loại bỏ tất cả các sản phẩm xây dựng.

Nếu bất kỳ <path>...đối số tùy chọn nào được đưa ra, chỉ những đường dẫn đó bị ảnh hưởng.


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

# Print out the list of files which will be removed (dry run)
git clean -n

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

# Delete the files from the repository
git clean -f
  • Để xóa thư mục, hãy chạy git clean -f -dhoặcgit clean -fd
  • Để xóa các tệp bị bỏ qua, hãy chạy git clean -f -Xhoặcgit clean -fX
  • Để xóa các tệp bị bỏ qua và không bị bỏ qua, hãy chạy git clean -f -xhoặcgit clean -fx

Lưu ý sự khác biệt trường hợp trên Xcho 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, người ta cần chỉ định -fnếu không sẽ không có gì thực sự xảy ra.

Một lần nữa xem các git-cleantài liệu để biết thêm thông tin.


Tùy chọn

-f, --force

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, -nhoặc -i.

-x

Không sử dụng các quy tắc bỏ qua tiêu chuẩn được đọc từ .gitignore (trên mỗi thư mục) và $GIT_DIR/info/exclude, nhưng vẫn sử dụng các quy tắc bỏ qua được cung cấp với -ecác tùy chọn. Điều này cho phép loại bỏ tất cả các tệp không bị theo dõi, bao gồm cả 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 bản dựng sạch.

-X

Chỉ xóa các tệp bị bỏ qua bởi Git. Đ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 thủ công.

-n, --dry-run

Đừng thực sự loại bỏ bất cứ điều gì, chỉ hiển thị những gì sẽ được thực hiện.

-d

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


288
git clean -fchỉ hoạt động trong thư mục có tên (và 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

17
Nó cũng đang xóa tất cả các tệp 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

24
@Kostanos Nếu bạn không muốn xóa các tệp trong .gitignore, thì không cung cấp cờ -x.
Lo-Tan

52
git clean -f :/hoạt động như thể bạn đã chạy nó trong thư mục gốc repo. Xem thêm câu trả lời sau cũng tính toán cho các mô hình con vớigit clean -ffxd :/
ở đây

18
@Michelle git sạch -xfd SILL BỎ L ALL TẤT CẢ CÁC PHIM NGAY LẬP TỨC TRONG .gitignore CỦA BẠN và chúng không thể phục hồi
thedanotto

987

Sử dụng git clean -f -dđể đảm bảo rằng các thư mục cũng được gỡ bỏ.

  1. Đừng thực sự loại bỏ bất cứ điều gì, chỉ hiển thị những gì sẽ được thực hiện.

    git clean -n
    

    hoặc là

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

    git clean -fd
    

Sau đó, bạn có thể kiểm tra xem các tập tin của bạn đã thực sự đi cùng git status.


115
Như đã nói trước đây, tốt để chạy khô vớigit clean -n -d
Ms01

15
Điều tương tự là để làm git clean -ndgit clean -fd.
Micer

478

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 bị ảnh hưởng. Nhìn chung, vẫn nhanh hơn so với việc chạy bắt buộc --dry-runtrước khi làm sạch thực sự.

Bạn sẽ phải ném vào -dnếu bạn cũng muốn chăm sóc 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ậpgit clean -fd


16
@ pal4life Nó được thêm vào 1.8.4, bạn có thể đang chạy phiên bản cũ hơn của git? github.com/git/git/blob/master/Documentation/RelNotes/1.8.4.txt
Mattias

Tôi thích điều này - Tôi cảm thấy thoải mái hơn khi có nó trong lịch sử bash của mình hơn bất kỳ tùy chọn nào khác, bởi vì sẽ không có vấn đề gì lớn nếu tôi vô tình ctrl-r hoặc ctrl-p với nó.
csvoss

Có thể nó git clean -ichỉ hoạt động nếu được gọi từ gốc của bản sao làm việc?
Alessandro Jacopson


250

Nếu thư mục không bị theo dõi là kho lưu trữ git của riêng nó (ví dụ: mô hình con), bạn cần sử dụng -fhai lần:

git clean -d -f -f


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

248

Cách đơn giản để loại bỏ các tập tin không bị theo dõi

Để xóa tất cả các tệp không bị theo dõi, Cách đơn giản là thêm tất cả chúng trướcđặt lại repo như bên dưới

git add --all
git reset --hard HEAD


8
Bạn có thể thay thế git add --allbằng git add .. Vì vậy, bạn có thể làm điều đó một cách ngắn gọn hơn trong dòng git add . && git reset --hard HEAD ( rất cẩn thận với lệnh này) .
RousseauAlexandre

22
Tại sao sử dụng này hơn git clean?
dùng2864740

8
Bởi vì git cleanrõ ràng cũng xóa mọi thứ bị bỏ qua. Nó vừa xóa node_modulesthư mục của tôi . Làm điều này trước tiên sẽ giai đoạn tất cả các tệp ngoại trừ các tệp bị bỏ qua, sau đó xóa chúng bằng cách thực hiện đặt lại. Các tập tin bị bỏ qua sẽ không được chạm vào.
Andreas

5
@Andreas nó không xóa các tập tin bị bỏ qua cho tôi (git 2.14.1). Dù sao thì bạn cũng nên chạygit clean -n trước khi thực hiện xóa (hoặc sử dụng git clean -i).
Qw3ry

8
git cleanchỉ xóa các tệp bị bỏ qua nếu bạn sử dụng tùy chọn -xhoặc -Xtùy chọn, nếu không, nó chỉ xóa các tệp không bị theo dõi.
doubleDown

140

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

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

EDIT2: git stash savekhông được ủng hộ push. Cảm ơn @ script-sói.


3
Bạn có thể giải thích các -u trên stash? Tôi không làm theo cách nó hoạt động khác với git stash save. Tôi đã thử điều này và nó đã làm việc. Nhìn vào tài liệu git và cũng không thể tìm thấy nó ở đó.
Winnemucca

9
-utương đương với --include-untracked. Bạn có thể tìm thấy một sự giúp đỡ với git help stash.
hiroshi

3
@hiroshi Cảm ơn! sau khi thử mọi giải pháp chết tiệt từ hàng tá người khác nhau, đây là giải pháp cuối cùng đã hoạt động ... whew! Ngay cả một stit git đã làm nada. Tiết kiệm - u đã chăm sóc không bị theo dõi. thiết lập lại cứng / lực sạch / vv không ai trong số này đã làm bất cứ điều gì cho tôi.
killjoy

3
Các savetùy chọn đã không được ủng hộ push, điều này cũng tương tự nhưng nhiều hơn. Bạn có thể đọc thêm ở đây, /programming/44680028/whats-the-difference-between-git-stash-save-and-git-stash-push/44681952
Script Wolf

120

Đâ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.


@Martin Một trong những dự án tôi đang thực hiện là +8 tuổi với hơn 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 đường chuyền đầu tiên.
Oscar Fraxedas

1
Tôi có thể xác nhận điều này, vì vậy điều này vẫn còn hiệu lực vào năm 2020. Chúng tôi cũng đang làm việc trên một dự án lớn và tôi đã phải chạy nó 4-5 lần cho đến khi GIT không tìm thấy thêm tệp nào bị xóa.
turbolocust

90

git-sạch là những gì bạn đang tìm kiếm. Nó được sử dụng để loại bỏ các tập tin không bị theo dõi khỏi cây làm việc.


86

Nếu cần để xóa các tệp không bị theo dõi khỏi thư mục con cụ thể,

git clean -f {dir_path}

Và kết hợp cách để xóa dir / tập tin không bị theo dõi và các tập tin bị bỏ qua.

git clean -fxd {dir_path}

sau này bạn sẽ chỉ sửa đổi các tập tin trong git status.


68

Xóa tất cả các thư mục và tệp bổ sung trong repo + mô đun con này

Điều này giúp bạn trong trạng thái giống như bản sao mới.

git clean -ffdx

Xóa tất cả các thư mục và tệp bổ sung trong repo này nhưng không phải các mô hình con của nó

git clean -fdx

Xóa các thư mục bổ sung nhưng không xóa các tệp (ví dụ: thư mục bản dựng hoặc bản ghi)

git clean -fd

Xóa các thư mục bổ sung + các tệp bị bỏ qua (nhưng các tệp không được thêm mới)

Nếu tập tin không bị bỏ qua và chưa được đăng ký thì nó vẫn ở lại. Lưu ý vốn X.

git clean -fdX

Chế độ tương tác mới

git clean

57

git clean -fd xóa thư mục

git clean -fX xóa các tập tin bị bỏ qua

git clean -fx xóa các tập tin bị bỏ qua và bỏ qua

có thể được sử dụng tất cả các tùy chọn trên kết hợp như

git clean -fdXx

kiểm tra hướng dẫn sử dụng git để được trợ giúp thêm


10
Lệnh git clean -fdXxtạo ra thông báo lỗi "gây tử vong: -x và -X không thể được sử dụng cùng nhau" (sử dụng git-2.8). Đối với câu cuối cùng trong câu trả lời của bạn, vui lòng cung cấp một liên kết đến hướng dẫn sử dụng git. Chúc mừng
olibre

chạy hai lệnh theo trình tự: git clean -fdX, git clean -fdx
Đồng hồ ZHONG

55

OK, xóa các tệp và thư mục không bị theo dõi không mong muốn dễ dàng sử dụng gittrong dòng lệnh, chỉ cần làm như thế này:

git clean -fd

Kiểm tra hai lần trước khi thực hiện vì nó sẽ xóa các tệp và thư mục mà không tạo bất kỳ lịch sử nào ...

Cũng trong trường hợp này, -fviết tắt của lực lượng và -dlà viết tắt của thư mục ...

Vì vậy, nếu bạn chỉ muốn xóa các tệp, bạn chỉ có thể sử dụng -f:

git clean -f

Nếu bạn muốn xóa (thư mục) và tệp, bạn chỉ có thể xóa các thư mục và tệp không bị theo dõi như thế này:

git clean -fd

Ngoài ra, bạn có thể sử dụng -xcờ để bao gồm các tệp bị bỏ qua bởi git. Điều này sẽ hữu ích nếu bạn muốn xóa mọi thứ.

Và thêm -icờ, làm cho git yêu cầu bạn cho phép xóa từng tệp một khi đang di chuyển.

Nếu bạn không chắc chắn và muốn kiểm tra mọi thứ trước, hãy thêm -ncờ.

Sử dụng -qnếu bạn không muốn xem bất kỳ báo cáo nào sau khi xóa thành công.

Tôi cũng tạo ra hình ảnh dưới đây để làm cho nó dễ nhớ hơn, đặc biệt là tôi đã thấy nhiều người nhầm lẫn -fvới việc làm sạch thư mục đôi khi hoặc trộn nó lên bằng cách nào đó!


xóa các tập tin và thư mục không bị theo dõi


Hình ảnh đó là gì?
Pacerier

37

Cách tốt hơn là sử dụng: git sạch

git clean -d -x -f

Điều này loại bỏ các tệp không bị theo dõi, bao gồm các thư mục (-d)và các tệp bị bỏ qua bởi git (-x).

Ngoài ra, thay thế -fđối số bằng -nđể thực hiện một dry-runhoặc -icho chế độ tương tác và nó sẽ cho bạn biết những gì sẽ bị xóa.


25

Phương pháp tương tác người dùng:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/arsdumpgenerator/s3/ [y/N]? y

-i cho tương tác
-f cho lực lượng
-d cho thư mục
-x cho các tệp bị bỏ qua (thêm nếu cần)

Lưu ý: Thêm -n hoặc --dry-run để chỉ kiểm tra những gì nó sẽ làm.


20

Một cuộc sống cho tình huống như vậy tôi vừa phát minh và thử (nó hoạt động hoàn hảo):

git add .
git reset --hard HEAD

Coi chừng! Hãy chắc chắn để thực hiện bất kỳ thay đổi cần thiết (ngay cả trong các tệp không bị theo dõi) trước khi thực hiện điều này .


3
Ít nhất đây là một cách tiếp cận khác nhau. :) Một cách khác, sẽ nhớ các tệp đã bị xóa trong reflog nhưng không ở bất kỳ nhánh nào, sẽ là:git add . git commit -m 'about to delete' git reset --hard HEAD~
joeytwiddle

2
cách nhanh hơn nữa làgit add . && git reset --hard HEAD
thybzi

3
git add . && git reset --hard
Pleymor

Đây có thể không phải là điều bạn muốn nếu cũng có những thay đổi bạn muốn cam kết.
lacostenycoder

@AlexanderMills git reset --hardđặt lại tất cả các thay đổi chưa được xác nhận NHƯNG PHIM KHÔNG GIỚI HẠN về trạng thái của cam kết mới nhất. Đó là lý do tại sao trước tiên chúng tôi cần git add .- giai đoạn tất cả các tệp không được theo dõi (vì vậy chúng cũng được đặt lại)
thybzi

19

git clean -f -d -x $(git rev-parse --show-cdup)áp dụng sạch cho thư mục gốc, bất kể bạn gọi nó ở đâu trong cây thư mục kho lưu trữ. Tôi sử dụng nó mọi lúc vì nó không bắt bạn phải rời khỏi thư mục nơi bạn đang làm việc và cho phép dọn dẹp & cam kết ngay từ nơi bạn đang ở.

Hãy chắc chắn rằng lá cờ -f, -d, -xphù hợp với nhu cầu của bạn:

-d
       Remove untracked directories in addition to untracked files. If an
       untracked directory is managed by a different Git repository, it is
       not removed by default. Use -f option twice if you really want to
       remove such a directory.

-f, --force
       If the Git configuration variable clean.requireForce is not set to
       false, git clean will refuse to delete files or directories unless
       given -f, -n or -i. Git will refuse to delete directories with .git
       sub directory or file unless a second -f is given. This affects
       also git submodules where the storage area of the removed submodule
       under .git/modules/ is not removed until -f is given twice.

-x
       Don't use the standard ignore rules read from .gitignore (per
       directory) and $GIT_DIR/info/exclude, but do still use the ignore
       rules given with -e options. This allows removing all untracked
       files, including build products. This can be used (possibly in
       conjunction with git reset) to create a pristine working directory
       to test a clean build.

Có những lá cờ khác cũng có sẵn, chỉ cần kiểm tra git clean --help.


BTW bạn chỉ có thể thực hiện git clean {flags}: / vì vậy sẽ như thể bạn đã chạy lệnh trong gốc repo
The-null-Pulum-

19

Đối với tôi chỉ làm việc sau đây:

git clean -ffdx

Trong tất cả các trường hợp khác, tôi đã nhận được thông báo "Bỏ qua thư mục " cho một số thư mục con.


2
Cảm ơn. Tôi đã bỏ qua -xvà chỉ sử dụng git clean -ffdđể tránh xóa các tệp trong .gitignore.
Feckmore

15

Nếu bạn chỉ muốn xóa các tệp được liệt kê là không bị theo dõi bởi 'trạng thái git'

git stash save -u
git stash drop "stash@{0}"

Tôi thích điều này hơn 'git clean' vì 'git clean' sẽ xóa các tệp bị bỏ qua bởi git, vì vậy bản dựng tiếp theo của bạn sẽ phải xây dựng lại mọi thứ và bạn cũng có thể mất các cài đặt IDE của mình.


3
Điều này cũng sẽ loại bỏ các thay đổi hợp lệ cho các tập tin được theo dõi. Tôi sẽ không đề nghị nó.
code_dredd

2
Vâng, trước tiên bạn muốn cam kết thay đổi các tệp được theo dõi.
jazzdev

14

Để biết những gì sẽ bị xóa trước khi thực sự xóa:

git clean -d -n

Nó sẽ xuất ra một cái gì đó như:

Sẽ xóa sample.txt

Để xóa mọi thứ được liệt kê trong đầu ra của lệnh trước:

git clean -d -f

Nó sẽ xuất ra một cái gì đó như:

Xóa mẫu.txt


11

Để loại bỏ các tệp không bị theo dõi, trước tiên bạn nên sử dụng lệnh để xem các tệp sẽ bị ảnh hưởng khi làm sạch

git clean -fdn

Điều này sẽ cho bạn thấy danh sách các tập tin sẽ bị xóa. Bây giờ để thực sự xóa những tập tin đó, hãy sử dụng lệnh này:

git clean -fd

11

Hãy cẩn thận trong khi chạy lệnh `git clean`.

Luôn luôn sử dụng -n trước khi chạy lệnh thực tế vì nó sẽ cho bạn thấy những tập tin nào sẽ bị xóa.

git clean -n -d 
git clean -f -d

Theo mặc định, git cleansẽ chỉ xóa các tệp không bị theo dõi mà không bị bỏ qua. Bất kỳ tệp nào khớp với một mẫu trong .gitignore hoặc các tệp bỏ qua khác của bạn sẽ không bị xóa. Nếu bạn cũng muốn xóa các tệp đó, bạn có thể thêm một -xlệnh sạch.

git clean -f -d -x

Ngoài ra còn có chế độ tương tác có sẵn -ivới lệnh sạch

git clean -x -i

Hoặc

Nếu bạn không chắc chắn 100% rằng việc xóa công việc không được cam kết của bạn là an toàn, bạn có thể sử dụng stashing thay thế

git stash --all

Nó cũng sẽ xóa thư mục của bạn nhưng cung cấp cho bạn sự linh hoạt để truy xuất các tệp tại bất kỳ thời điểm nào bằng cách sử dụng stash với áp dụng hoặc pop . Sau đó, tại thời điểm sau, bạn có thể xóa stash của mình bằng cách sử dụng:

git stash drop // or clean

2
stash là một ý tưởng tốt, tuy nhiên bạn có thể muốn sử dụnggit stash save and type some comment as to what this stash was for
lacostenycoder

9

git clean -f to remove untracked files from working directory.

Tôi đã trình bày một số điều cơ bản ở đây trong blog của mình, các lệnh git-intro-basic-


9

Lệnh được đề xuất để xóa các tệp không bị khóa khỏi tài liệu gitgit sạch

git clean - Xóa các tệp không bị theo dõi khỏi cây làm việc

Phương pháp đề xuất: Chế độ tương tác bằng cách sử dụng git clean -i để chúng tôi có thể kiểm soát nó. để xem các tùy chọn có sẵn còn lại.

Tùy chọn có sẵn:

git clean 
    -d -f -i -n -q -e -x -X (can use either)

Giải trình:

1. -d

Loại bỏ các thư mục không bị theo dõi ngoài các tập tin không bị theo dõi. Nếu một thư mục không bị theo dõi được quản lý bởi một kho lưu trữ Git khác, nó sẽ không bị xóa 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.

2. -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.

3. -i, - tương tác

Hiển thị những gì sẽ được thực hiện và làm sạch các tệp tương tác. Xem chế độ tương tác trực tuyến để xem chi tiết.

4. -n, --dry-run

Đừng thực sự loại bỏ bất cứ điều gì, chỉ hiển thị những gì sẽ được thực hiện.

5. -q, --quiet

Hãy im lặng, chỉ báo cáo lỗi, nhưng không xóa các tệp được xóa thành công.

6. -e, - bao gồm =

Ngoài các mẫu được tìm thấy trong .gitignore (trên mỗi thư mục) và $ GIT_DIR / thông tin / loại trừ, cũng xem xét các mẫu này nằm trong bộ quy tắc bỏ qua có hiệu lực.

7. -x

Không sử dụng quy tắc bỏ qua tiêu chuẩn được đọc từ .gitignore (mỗi thư mục) và $ GIT_DIR / thông tin / loại trừ, 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 loại bỏ tất cả các tệp không bị theo dõi, bao gồm cả 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 bản dựng sạch.

8. -X

Chỉ xóa các tệp bị bỏ qua bởi Git. Đ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 thủ công.


Tôi nghĩ rằng bạn có một lỗi đánh máy uggestednhưng đó chỉ là một " uggestionlol
lacostenycoder

8

git cleanLệnh bình thường không xóa các tệp không bị theo dõi với của tôi git version 2.9.0.windows.1.

$ git clean -fdx     # doesn't remove untracked files
$ git clean -fdx *   # Append star then it works!

7

Chúng ta có thể dễ dàng loại bỏ các tệp không bị theo dõi cục bộ khỏi cây làm việc git hiện tại bằng cách sử dụng các bình luận git bên dưới.

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

Thí dụ:

git reset --hard HEAD

Liên kết:

  1. https://git-scm.com/docs/git-reset
  2. Làm cách nào để tôi sử dụng 'git reset --hard HEAD' để trở lại cam kết trước đó?
  3. Đặt lại nhánh kho lưu trữ cục bộ giống như kho lưu trữ từ xa
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html

Điều này cũng sẽ loại bỏ các thay đổi được dàn dựng cho cam kết, không chỉ các tệp không bị theo dõi, có thể không phải là những gì bạn muốn.
raspy

Không hoạt động: để lại một số tệp. git clean -ffdxlà giải pháp
Eugene Gr. Philippov

7

Dọn dẹp kho git và tất cả các mô đun con đệ quy

Lệnh sau sẽ dọn sạch kho git hiện tại và tất cả các mô đun con của nó theo cách đệ quy:

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)

chắc chắn điều này nên được sử dụng hết sức thận trọng
lacostenycoder

6
git clean -f

sẽ xóa các tệp không bị theo dõi khỏi git hiện tại

git clean -fd

Khi bạn muốn xóa thư mục và tệp, điều này sẽ chỉ xóa các thư mục và tệp không bị theo dõi


5

oh-my-zsh với zsh cung cấp những bí danh tuyệt vời đó thông qua plugin git. Chúng có thể được sử dụng trong bash là tốt.

gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'

  • gclean loại bỏ các thư mục không bị theo dõi ngoài các tập tin không bị theo dõi .
  • gpristinecứng thiết lập lại các thay đổi cục bộ, xóa các thư mục không bị theo dõi, các tệp không bị theo dõi và không sử dụng các quy tắc bỏ qua tiêu chuẩn được đọc từ .gitignore (mỗi thư mục) và $ GIT_DIR / thông tin / loại trừ, nhưng vẫn sử dụng các quy tắc bỏ qua được cung cấp với các tùy chọn -e. Điều này cho phép loại bỏ tất cả các tệp không bị theo dõi, bao gồm cả 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 bản dựng sạch .

2
Cảm ơn bạn đã phản hồi, tuyên bố của tôi đã gây nhầm lẫn. Tôi muốn nói rằng các bí danh được tô sáng tự động đến với oh-my-zsh. Họ rõ ràng làm việc tuyệt vời trong bash. Tôi chỉnh sửa câu trả lời của mình để phản ánh điều đó.
ZenLulz

4

Tôi thích sử dụng git stashlệnh, sau này bạn có thể nhận được các tệp được lưu và thay đổi. git cleancũng là một lựa chọn tốt nhưng hoàn toàn phụ thuộc vào yêu cầu của bạn. Dưới đây là lời giải thích về git stash và git clean, 7.3 Git Tools - Stashing and Cleaning

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.