區別:
--hard:重置位置的同時,直接將working tree工作目錄、index 暫存區及repository都重置成目標reset節點的內容,所以效果看起來等同於清空暫存區和工作區。
--soft:重置位置的同時,保留working tree工作目錄和index暫存區的內容,只讓repository中的內容和reset目標節點保持一致,因此原節點和reset節點之間的【差異變更集】會放入index暫存區中(staged files)。所以效果看起來就是工作目錄的內容不變,暫存區原有的內容也不變,只是原節點和reset節點之間的所有差異都會放到暫存區中。
--mixed(預設):重置位置的同時,只保留working tree工作目錄的內容,但會將index暫存區和repository中的內容更改和reset目標節點一致,因此原節點和reset節點之間的【差異變更集】會放入working tree工作目錄中。所以效果看起來就是原節點和reset節點之間的所有差異都會放到工作目錄中。
使用場景:
--hard:(1)要放棄目前本地的所有改變時,即去掉所有add到暫存區的檔案和工作區的檔案,可以執行git reset -hard head來強制恢復git管理的資料夾的內容及狀態;(2)真的想拋棄目標節點後的所有commit(可能覺得目標節點到原節點之間的commit提交都是錯了,之前所有的commit有問題)。
--soft:原節點和reset節點之間的【差異變更集】會放入index暫存區中(staged files),所以假如我們之前工作目錄沒有改過任何檔案,也沒add到暫存區,那麼使用reset --soft後,我們可以直接執行git commit將 index暫存區中的內容提交至repository中。為什麼要這樣呢?這樣做的使用場景是:假如我們想合併「當前節點」與「reset目標節點」之間不具太大意義的commit記錄(可能是階段性地頻繁提交,就是開發乙個功能的時候,改或者增加乙個檔案的時候就commit,這樣做導致乙個完整的功能可能會好多個commit點,這時假如你需要把這些commit整合成乙個commit的時候)時,可以考慮使用reset --soft來讓commit演進線圖較為清晰。總而言之,可以使用--soft合併commit節點。
--mixed(預設):(1)使用完reset --mixed後,我們可以直接執行git add將這些改變果的檔案內容加入index 暫存區中,再執行git commit將index暫存區中的內容提交至repository中,這樣一樣可以達到合併commit節點的效果(與上面--soft合併commit節點差不多,只是多了git add新增到暫存區的操作);(2)移除所有index暫存區中準備要提交的檔案(staged files),我們可以執行git reset head來unstage所有已列入index暫存區的待提交的檔案。(有時候發現add錯檔案到暫存區,就可以使用命令)。(3)commit提交某些錯誤**,或者沒有必要的檔案也被commit上去,不想再修改錯誤再commit(因為會留下乙個錯誤commit點),可以回退到正確的commit點上,然後所有原節點和reset節點之間差異會返回工作目錄,假如有個沒必要的檔案的話就可以直接刪除了,再commit上去就ok了。
Git Reset三種模式
前言 在最近的工作中使用到git遇到的一些問題,對git的了解加深了一點。有時候,當我們commit 後,發現這一次commit的內容是有錯誤的,這個時候有兩種處理方法 1 修改錯誤內容,再一次commit 2 使用git reset命令撤銷這一次錯誤的commit 這兩種方法,第一種比較直接,但會...
git reset三種模式詳解
使用git reset命令可回退到指定的commit,本質其實就是將head指向分支的commit移動到了目標的commit上面 git reset命令有三種模式可供使用,分別是 git reset mixed 不加引數預設為此模式 git reset sort git reset hard 下面分...
Git reset的三種模式
重置stage區和工作目錄 慎用 在reset後面加 hard引數時,stage區和工作目錄裡的內容會被完全重置為和指定head位置相同的內容。也就是沒有commit的修改會被全部擦掉。執行後工作區 暫存區 版本庫保持一致 指定head版本 administrator win dtnf3grdh5r...