Họ làm hai việc khác nhau. Giả sử, bạn đã thực hiện GIT PULL
và sau đó bắt đầu chỉnh sửa một số tệp và có thể đã thêm và cam kết những thay đổi đó sẽ được đẩy ... và sau đó vì lý do nào đó, bạn đã quyết định loại bỏ tất cả các thay đổi đã được thực hiện cho các tệp đã cho và trở lại trạng thái trước đó. trong trường hợp bạn sẽ làm
$ git reflog
... snip ...
cf42fa2... [email protected]{0}: commit: fixed misc bugs
~
~
cf42fa2... [email protected]{84}: commit: fixed params for .....
73b9363... [email protected]{85}: commit: Don't symlink to themes on deployment.
547cc1b... [email protected]{86}: commit: Deploy to effectif.com web server.
1dc3298... [email protected]{87}: commit: Updated the theme.
18c3f51... [email protected]{88}: commit: Verify with Google webmaster tools.
26fbb9c... [email protected]{89}: checkout: moving to effectif
Chọn cam kết rằng bạn muốn quay trở lại để, như vậy:
git reset --hard 73b9363
sau khi cài đặt lại HEAD, tất cả thay đổi không bị giam/file sẽ biến mất.
Còn với git clean. Dưới đây là cách git-docs mô tả nó.
DESCRIPTION
Cleans the working tree by recursively removing files that
are not under version control, starting from the current directory.
Normally, only files unknown to Git are removed, but if the -x
option is specified, ignored files are also removed. This
can, for example, be useful to remove all build products.
If any optional <path>... arguments are given, only those paths are affected.
Thông tin thêm về thiết lập lại vs sạch và --options họ
lnydex99uhc:~ user$ git reset -h
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
or: git reset [-q] <tree-ish> [--] <paths>...
or: git reset --patch [<tree-ish>] [--] [<paths>...]
-q, --quiet be quiet, only report errors
--mixed reset HEAD and index
--soft reset only HEAD
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
--keep reset HEAD but keep local changes
-p, --patch select hunks interactively
VS
lnydex99uhc:~ user$ git clean -h
usage: git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>...
-q, --quiet do not print names of files removed
-n, --dry-run dry run
-f, --force force
-i, --interactive interactive cleaning
-d remove whole directories
-e, --exclude <pattern>
add <pattern> to ignore rules
-x remove ignored files, too
-X remove only ignored files
[1]: http://git-scm.com/docs/git-clean
đâu * không * nó nói 'git reset --hard sẽ không thay đổi hiện tại thư mục làm việc'? Nó rõ ràng nói ngược lại - "Đặt một cách khác: điều này ** [đặt lại cứng] xóa tất cả các thay đổi không được cam kết **". – user2864740
Ngoài ra, hãy chú ý đến "Hãy nhớ rằng [cứng] ** đặt lại * chỉ ảnh hưởng đến các tệp được theo dõi ***, vì vậy cần có lệnh [clean] riêng biệt để dọn dẹp các tệp không được theo dõi." – user2864740
@ user2864740 phải xóa tất cả các thay đổi chưa được cam kết nếu nó cũng đặt lại thư mục làm việc để khớp với cam kết cuối cùng, tại sao chúng ta vẫn cần lệnh git clean, vì trong trường hợp này sẽ không có bất kỳ tệp nào không được làm như thư mục làm việc và vùng dàn đều giống nhau – AlexWang