Tôi chỉ nhân bản một kho lưu trữ git và kiểm tra một chi nhánh. Tôi đã làm việc với nó, và sau đó quyết định loại bỏ tất cả các thay đổi cục bộ của tôi, vì tôi muốn bản sao gốc.
Nói tóm lại, tôi đã phải thực hiện hai lệnh sau để loại bỏ các thay đổi cục bộ của mình
git checkout .
git clean -f
Câu hỏi của tôi là,
(1) Đây có phải là cách tiếp cận chính xác trong việc loại bỏ các thay đổi cục bộ, hoặc nếu không xin vui lòng cho tôi biết cách tiếp cận chính xác.
(2) khi nào chúng ta sử dụng git reset --hard
vì tôi có thể thiết lập lại ngay cả khi không có lệnh này
Cảm ơn
* Giải pháp: Chính (các) Chỉnh sửa: 26/03: * Thay thế nhiều thuật ngữ mơ hồ bằng thuật ngữ cụ thể của git [theo dõi / không theo dõi / dàn dựng / không dàn dựng]
Chỉ có thể có ba loại tệp khi chúng tôi thực hiện thay đổi cục bộ:
Loại 1. Tập tin theo dõi theo giai đoạn
Loại 2. Các tệp được theo dõi không theo dõi
Loại 3. Các tệp chưa được mã hóa
- Giai đoạn - Những người được chuyển đến khu vực tổ chức / Đã thêm vào chỉ mục
- Theo dõi - sửa đổi tập tin
- UnTracked - tập tin mới. Luôn luôn không được tổ chức. Nếu được dàn dựng, điều đó có nghĩa là họ được theo dõi.
Mỗi lệnh làm gì:
git checkout .
- Loại bỏ các tệp được theo dõi không theo dõi CHỈ [Loại 2]git clean -f
- Loại bỏ các tệp chưa được xử lý CHỈ [Loại 3]git reset --hard
- Loại bỏ các tệp được theo dõi theo giai đoạn và không theo dõi CHỈ [Loại 1, Loại 2]git stash -u
- Xóa tất cả các thay đổi [Loại 1, Loại 2, Loại 3]
Phần kết luận:
Rõ ràng là chúng ta có thể sử dụng một trong hai
(1) combination of `git clean -f` and `git reset --hard`
HOẶC LÀ
(2) `git stash -u`
để đạt được kết quả mong muốn.
Lưu ý: Stashing, vì từ này có nghĩa là 'Lưu trữ (một cái gì đó) một cách an toàn và bí mật ở một nơi được chỉ định.' Điều này luôn có thể được lấy bằng cách sử dụng git stash pop
. Vì vậy, lựa chọn giữa hai tùy chọn trên là cuộc gọi của nhà phát triển.
Cảm ơn bạn Christoph và Frederik Schøning.
Chỉnh sửa: 27/03
Tôi nghĩ rằng đáng để đặt ghi chú ' cẩn thận ' vàogit clean -f
git clean -f
Không có đường nào để trở lại đâu. Sử dụng -n
hoặc --dry-run
để xem trước thiệt hại bạn sẽ làm.
Nếu bạn cũng muốn xóa thư mục, hãy chạy git clean -f -d
Nếu bạn chỉ muốn xóa các tập tin bị bỏ qua, hãy chạy git clean -f -X
Nếu bạn muốn xóa bỏ qua cũng như các tệp không bị bỏ qua, hãy chạy git clean -f -x
tham khảo: thêm về git clean
: Làm thế nào để loại bỏ 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?
Chỉnh sửa: 20/05/15
Loại bỏ tất cả các cam kết cục bộ trên nhánh này [Xóa các cam kết cục bộ]
Để loại bỏ tất cả các cam kết cục bộ trên nhánh này, để làm cho nhánh cục bộ giống hệt với "thượng nguồn" của nhánh này, chỉ cần chạy git reset --hard @{u}
Tham khảo: http://sethrobertson.github.io/GitFixUm/fixup.html
hoặc làm git reset --hard origin/master
[nếu chi nhánh địa phương là master
]
Lưu ý: 06/12/2015 Đây không phải là một bản sao của câu hỏi SO khác được đánh dấu là trùng lặp. Câu hỏi này giải quyết làm thế nào để loại bỏ các thay đổi GIT cục bộ [xóa một tệp được thêm vào, xóa các thay đổi được thêm vào tệp hiện có, v.v. và các cách tiếp cận khác nhau; Trường hợp trong luồng SO khác chỉ giải quyết làm thế nào để loại bỏ cam kết cục bộ. Nếu bạn đã thêm một tệp và bạn muốn xóa tệp đó một mình, thì luồng SO khác sẽ không thảo luận về nó. Do đó đây không phải là bản sao của cái khác]
Chỉnh sửa: 23/11/15
Làm thế nào để hoàn nguyên một cam kết đã được đẩy đến một kho lưu trữ từ xa?
$ git revert ab12cd15
Chỉnh sửa: 09/01/2015
Xóa một cam kết trước đó từ chi nhánh địa phương và chi nhánh từ xa
Trường hợp: Bạn vừa cam kết một thay đổi cho chi nhánh địa phương của bạn và ngay lập tức bị đẩy đến chi nhánh từ xa, Đột nhiên nhận ra, Ồ không! Tôi không cần sự thay đổi này. Bây giờ làm gì?
git reset --hard HEAD~1
[để xóa cam kết đó từ chi nhánh địa phương]
git push origin HEAD --force
[cả hai lệnh phải được thực thi. Để xóa từ chi nhánh từ xa]
Chi nhánh là gì? Chi nhánh hiện đang được kiểm tra.
Chỉnh sửa 09/08/2015 - Xóa hợp nhất git cục bộ :
Tôi đang ở master
chi nhánh và sáp nhập master
chi nhánh với một chi nhánh mới hoạt độngphase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
Q: Làm thế nào để thoát khỏi sự hợp nhất này? Đã thử git reset --hard
và git clean -d -f
cả hai đều không hoạt động.
Điều duy nhất đã làm việc là bất kỳ trong số những người dưới đây:
$ git reset --hard origin/master
hoặc là
$ git reset --hard HEAD~8
hoặc là
$ git reset --hard 9a88396f51e2a068bb7
[mã xác nhận sha - đây là mã đã có mặt trước khi tất cả các cam kết hợp nhất của bạn xảy ra]
git stash -a
[hoặc --all] cũng sẽ xóa các tệp bị bỏ qua và không bị theo dõi. git clean -x
cũng sẽ làm sạch các tập tin bị bỏ qua. git clean -X
sẽ chỉ làm sạch các tập tin bị bỏ qua.