2011-06-01 44 views
52

Tôi cần hoàn nguyên các thay đổi cục bộ để triển khai. (Tôi đã sử dụng svn revert cho điều này trong các ngày skool SVN cũ.)Sự khác nhau giữa "git checkout -f" và "git reset --hard HEAD" là gì?

Và sử dụng git reset --hard HEAD cho việc này. (Ngoài ra git fetchgit merge origin/$branch --no-ff để đồng bộ hóa với chi nhánh ngược dòng.)

Nhưng một số bài viết chỉ git checkout -f để hoàn nguyên thay đổi.

Sự khác biệt chính giữa các lệnh này là gì. Cách nào được khuyến nghị?

+1

có thể trùng lặp của [Có sự khác biệt giữa "git reset --hard hash" và "git checkout hash" không?] (Http://stackoverflow.com/questions/2541545/is-there-a-difference-between -git-reset-hard-băm-và-git-checkout-băm) – Casebash

Trả lời

37

Hai trong số chúng có cùng tác dụng chính xác. Tôi khuyên bạn nên chọn giải pháp mà bạn càng trở nên hỗn độn hơn.

Nhưng nếu trong trường hợp cụ thể này, hiệu ứng là như nhau, với các giá trị khác nhau, nó sẽ hoàn toàn khác. Về cơ bản (có nhiều hơn, xem các chủ đề liên kết) với một thiết lập lại bạn di chuyển nhánh hiện tại và HEAD đến một cam kết cụ thể nhưng với một thanh toán, bạn chỉ di chuyển HEAD. Để biết thêm chi tiết, xem bên dưới.


Resources:

Trên cùng một chủ đề:

9

Đừng có đại diện nhận xét về câu trả lời khác nêu ra, tôi chỉ muốn thêm rằng tôi tình cờ gặp một trường hợp hai lệnh KHÔNG có cùng hiệu ứng. Tôi đã trở thành một nhà nước kỳ lạ vì vậy đây chắc chắn là một trường hợp cạnh. Đây là những gì đã xảy ra:

Tôi đã ở trong một nhánh, mọi thứ sạch sẽ. Tôi đã kiểm tra chủ git checkout master và tìm thấy từ git status rằng có những thay đổi đối với các tệp hiện có không được tổ chức cho một cam kết (có, trên mã tôi vừa kiểm tra). Tôi đã cố gắng vất vả để trở lại trạng thái sạch sẽ, dấu gạch ngang tuyên bố đã hoàn thành nhưng git status vẫn không thay đổi. Cũng đã thử git reset --hard HEAD. Nó cũng báo cáo thành công hoàn thành nhưng tình trạng không khác nhau. Tôi không thể hủy bỏ những thay đổi kỳ lạ này.

Tuy nhiên, git checkout -f đã giải quyết vấn đề này. Tôi đã có thể thoát khỏi trạng thái kỳ lạ này. Vì vậy, trong ít nhất một số cách, cả hai đều không giống nhau.

+0

Tôi chỉ có tình huống tương tự. Có một loạt các tập tin được sửa đổi mà git reset --hard HEAD sẽ không biến mất nhưng git checkout -f đã làm, vì vậy chúng rõ ràng không giống nhau ở một mức độ nào đó. –

+1

Trong trường hợp của chúng tôi, đó là do sự cho phép tập tin thay đổi; điều này cố định nó http: // stackoverflow.com/questions/1257592/how-do-i-remove-files-say-old-mode-100755-new-mode-100644-from-unstaged-cha –

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