原文:http://www.reibang.com/p/c2ec5f06cf1a
區(qū)別:
--hard
--hard:重置位置的同時,直接將 working Tree工作目錄末捣、 index 暫存區(qū)及 repository 都重置成目標Reset節(jié)點的內(nèi)容,所以效果看起來等同于清空暫存區(qū)和工作區(qū)。
--soft
--soft:重置位置的同時名扛,保留working Tree工作目錄和index暫存區(qū)的內(nèi)容撩穿,只讓repository中的內(nèi)容和 reset 目標節(jié)點保持一致,因此原節(jié)點和reset節(jié)點之間的【差異變更集】會放入index暫存區(qū)中(Staged files)侯繁。所以效果看起來就是工作目錄的內(nèi)容不變挂据,暫存區(qū)原有的內(nèi)容也不變以清,只是原節(jié)點和Reset節(jié)點之間的所有差異都會放到暫存區(qū)中。
--mixed
--mixed(默認):重置位置的同時崎逃,只保留Working Tree工作目錄的內(nèi)容掷倔,但會將 Index暫存區(qū) 和 Repository 中的內(nèi)容更改和reset目標節(jié)點一致,因此原節(jié)點和Reset節(jié)點之間的【差異變更集】會放入Working Tree工作目錄中个绍。所以效果看起來就是原節(jié)點和Reset節(jié)點之間的所有差異都會放到工作目錄中勒葱。
使用場景:
--hard
--hard:(1) 要放棄目前本地的所有改變時,即去掉所有add到暫存區(qū)的文件和工作區(qū)的文件巴柿,可以執(zhí)行 git reset -hard HEAD 來強制恢復git管理的文件夾的內(nèi)容及狀態(tài)凛虽;(2) 真的想拋棄目標節(jié)點后的所有commit(可能覺得目標節(jié)點到原節(jié)點之間的commit提交都是錯了,之前所有的commit有問題)广恢。
--soft
--soft:原節(jié)點和reset節(jié)點之間的【差異變更集】會放入index暫存區(qū)中(Staged files)凯旋,所以假如我們之前工作目錄沒有改過任何文件,也沒add到暫存區(qū),那么使用reset --soft后至非,我們可以直接執(zhí)行 git commit 將 index暫存區(qū)中的內(nèi)容提交至 repository 中钠署。為什么要這樣呢?這樣做的使用場景是:假如我們想合并「當前節(jié)點」與「reset目標節(jié)點」之間不具太大意義的 commit 記錄(可能是階段性地頻繁提交,就是開發(fā)一個功能的時候荒椭,改或者增加一個文件的時候就commit谐鼎,這樣做導致一個完整的功能可能會好多個commit點,這時假如你需要把這些commit整合成一個commit的時候)時趣惠,可以考慮使用reset --soft來讓 commit 演進線圖較為清晰狸棍。總而言之信卡,可以使用--soft合并commit節(jié)點隔缀。
--mixed
--mixed(默認):(1)使用完reset --mixed后,我們可以直接執(zhí)行 git add 將這些改變果的文件內(nèi)容加入 index 暫存區(qū)中傍菇,再執(zhí)行 git commit 將 Index暫存區(qū) 中的內(nèi)容提交至Repository中,這樣一樣可以達到合并commit節(jié)點的效果(與上面--soft合并commit節(jié)點差不多界赔,只是多了git add添加到暫存區(qū)的操作)丢习;(2)移除所有Index暫存區(qū)中準備要提交的文件(Staged files),我們可以執(zhí)行 git reset HEAD 來 Unstage 所有已列入 Index暫存區(qū) 的待提交的文件淮悼。(有時候發(fā)現(xiàn)add錯文件到暫存區(qū)咐低,就可以使用命令)。(3)commit提交某些錯誤代碼袜腥,或者沒有必要的文件也被commit上去见擦,不想再修改錯誤再commit(因為會留下一個錯誤commit點),可以回退到正確的commit點上羹令,然后所有原節(jié)點和reset節(jié)點之間差異會返回工作目錄鲤屡,假如有個沒必要的文件的話就可以直接刪除了,再commit上去就OK了福侈。