![](/img/trans.png)
[英]What is the difference between “git checkout — .” and “git reset HEAD --hard”?
[英]What is difference between “git checkout -f” and “git reset --hard HEAD”?
我需要恢復部署的本地更改。 (我在舊的 skool SVN 天使用了svn revert
。)
我為此使用git reset --hard HEAD
。 (還有git fetch
和git merge origin/$branch --no-ff
用於與上游分支同步。)
但是有些文章指出git checkout -f
用於恢復更改。
此命令之間的主要區別是什么。 推薦哪種方式?
兩者的效果完全一樣。 我建議您選擇您更滿意的解決方案。
但是,如果在這種特殊情況下效果相同,則使用不同的值將完全不同。 基本上(還有更多,請參閱鏈接的主題)通過重置您將當前分支和 HEAD 移動到特定提交,但通過結帳,您只移動 HEAD。 有關更多詳細信息,請參見下文。
資源:
在同一主題上:
還沒有代表對其他答案發表評論,我只是想補充一點,我遇到了兩個命令沒有相同效果的情況。 我遇到了一個奇怪的 state 所以這絕對是一個邊緣案例。 這是發生的事情:
我在一個分支,一切都干凈。 我檢查了 master git checkout master
並從git status
中發現現有文件的更改未暫存以進行提交(是的,在我剛剛簽出的代碼上)。 我嘗試將 go 存儲回一個干凈的 state,存儲聲稱已經完成,但git status
仍然沒有改變。 還嘗試git reset --hard HEAD
。 它也報告成功完成,但狀態沒有什么不同。 我無法中止這些奇怪的變化。
但是, git checkout -f
解決了這個問題。 我能夠擺脫這個奇怪的 state。 所以,至少在某些方面,兩者並不相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.