2011-06-01 151 views
52

我需要恢復部署的本地更改。 (我使用svn revert這個在舊的skool SVN天。)「git checkout -f」和「git reset --hard HEAD」有什麼區別?

而即時使用git reset --hard HEAD爲此。 (同時git fetchgit merge origin/$branch --no-ff用於與上游分支同步)

但是有些文章指出git checkout -f用於還原更改。

這些命令之間的關鍵區別是什麼。推薦哪種方式?

+1

[git reset --hard hash和git checkout hash是否有區別?](http://stackoverflow.com/questions/2541545/is-there-a-difference-between -git-reset-hard-hash-and-git-checkout-hash) – Casebash 2011-11-16 05:50:25

回答

37

他們兩個具有完全相同的效果。我建議你選擇你更舒適的解決方案。

但是,如果在這種特殊情況下效果是相同的,不同的值將會完全不同。基本上(還有更多,請參閱鏈接的主題),如果將當前分支和HEAD移動到特定的提交但結帳時,只移動HEAD。有關更多詳情,請參閱下文


資源:

關於同一主題:

9

不具備代表其他答案尚未就此發表評論,我只是想補充一點,我碰到其中兩個命令不具有相同的情況下,就影響。我進入了一個奇怪的狀態,所以這絕對是一個邊緣案例。這是發生了什麼事:

我在一個分支,一切都乾淨。我檢查出主git checkout master,並從git status發現,現有文件未進行提交的更改(是的,在我剛剛簽出的代碼上)。我試圖回到一個乾淨的狀態,存儲聲稱已完成,但git status仍然沒有改變。還試過git reset --hard HEAD。它也報告成功完成,但狀況並沒有改變。我無法放棄這些奇怪的變化。

但是,git checkout -f解決了這個問題。我能夠擺脫這種奇怪的狀態。所以,至少在某些方面,這兩者並不相同。

+0

我剛剛有完全相同的情況。有一堆修改後的文件,git reset - hard HEAD不會離開,但git checkout -f的確如此,所以它們在某些級別顯然不一樣。 – 2014-07-09 14:42:35

+1

在我們的案例中,這是由於文件權限的變化造成的;這個固定它http:// stackoverflow。COM /問題/ 1257592 /怎麼辦 - 我 - 刪除 - 文件 - 說的老模式 - 100755-新模式-100644-從-不分級-CHA – 2014-07-09 14:49:01

相關問題