簡體   English   中英

“git checkout -f”和“git reset --hard HEAD”有什么區別?

[英]What is difference between “git checkout -f” and “git reset --hard HEAD”?

我需要恢復部署的本地更改。 (我在舊的 skool SVN 天使用了svn revert 。)

我為此使用git reset --hard HEAD (還有git fetchgit 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM