2010-12-01 27 views
366

Khi tôi chạy git reset --hard HEAD, nó phải được đặt lại thành phiên bản nguyên sơ của những gì bạn đã kéo, như tôi đã hiểu. Thật không may, nó để lại các tập tin nằm xung quanh, như là một git status cho thấy một danh sách lớn các tập tin untracked.git reset --hard HEAD để lại các tệp không được theo dõi sau

Làm thế nào để bạn nói với git "Chỉ cần mang nó trở lại chính xác những gì đã được kéo cuối cùng, không có gì nhiều hơn, không có gì ít hơn"?

+27

'reset git --hard' reset chỉ số của bạn và trở lại trạng các tập tin theo dõi trở lại tình trạng như họ đang ở trong HEAD. Nó để lại các tập tin không bị hack một mình. – fifigyuri

+0

Bản sao có thể có của [Cách xóa các tệp cục bộ (không được theo dõi) khỏi cây làm việc Git hiện tại?] (Https://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the- hiện tại-git-working-tree) – g00glen00b

Trả lời

591

Bạn phải sử dụng git clean -f -d để loại bỏ các tệp và thư mục không được theo dõi trong bản sao làm việc của mình.

+35

Ngoài ra '-x' nếu bạn muốn xóa các tệp .gitignored của mình và quay lại trạng thái nguyên sơ. – jtdubs

+29

Thêm '-n' vào kiểm tra sẽ bị xóa trước tiên. kết hợp tất cả chúng trong một đối số: '-dfn' – HyBRiD

+22

Lệnh chung của tôi là' git clean -qfdx' tại đây. Loại bỏ tất cả mọi thứ và làm âm thầm. – aragaer

36

Nếu bạn có các tập tin bạn vẫn muốn giữ:

git clean -di sẽ làm một sạch sẽ tương tác cho phép bạn chỉ xóa các tập tin/dirs bạn không muốn nữa.

-12

Bạn có thể thực hiện một thiết lập lại mềm tại một số điểm, bạn có thể giải quyết vấn đề này bằng cách làm

git add . 
git reset --hard HEAD~100 
git pull 
+5

Tôi không nghĩ đây là điều OP mong muốn. Một trong những câu trả lời khác làm một công việc tốt hơn nhiều thực sự hiển thị như thế nào để sửa lỗi này. – Avery

+0

Điều này cũng có thể chậm nếu bạn có nhiều tệp để thêm. –

+0

hoàn toàn không liên quan. –

20
git reset --hard && git clean -dfx 

hay, zsh cung cấp một 'gpristine' bí danh:

alias gpristine='git reset --hard && git clean -dfx' 

nào thực sự tiện dụng

+2

lệnh rất nguy hiểm! –

+4

Xin lỗi nếu đây không phải là lệnh an toàn - tôi không cố gắng an toàn, tôi đã cố trả lời câu hỏi. Bạn có thể bình luận về việc liệu điều này có trả lời được câu hỏi không? – jjnevis

+0

Điều này hoạt động tốt và nên được xây dựng thành git IMHO (mặc dù tôi không chắc chắn tôi sẽ sử dụng -x thường xuyên). Vì vậy, nhiều lần tôi đang làm việc trên một dự án địa phương, chưa được đồng bộ hóa để github vv, và một nhà cấu trúc lộn xộn đi haywire vượt ra ngoài IDE 'undo' nhà nước. Bản năng của tôi là quay trở lại với cam kết cuối cùng nhưng googling cho rằng thường mất để trả lời cho cam kết áp chót, không cam kết cuối cùng. Tất cả những gì tôi muốn là quay lại cam kết gần đây nhất. Điều này làm điều đó. Nên là một cách dễ dàng hơn mặc dù. Cảm ơn Linus! ;-) –

5

Cách tiếp cận tương tác của 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/amazon/arsdumpgenerator/inspector/ [y/N]? y 
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y 
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y 
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y 
Remove tst/com/amazon/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 tin bị bỏ qua (thêm nếu cần)

Lưu ý:Thêm -n hoặc - chạy thử để chỉ kiểm tra xem nó sẽ làm gì.

1

Lệnh bạn đang tìm kiếm là git clean

Các vấn đề liên quan