git reset三種模式


reset三種模式區別和使用場景

區別:

  1. --hard:重置位置的同時,直接將 working Tree工作目錄index 暫存區repository 都重置成目標Reset節點的內容,所以效果看起來等同於清空暫存區和工作區。

  2. --soft:重置位置的同時,保留working Tree工作目錄index暫存區的內容,只讓repository中的內容和 reset 目標節點保持一致,因此原節點和reset節點之間的【差異變更集】會放入index暫存區中(Staged files)。所以效果看起來就是工作目錄的內容不變,暫存區原有的內容也不變,只是原節點和Reset節點之間的所有差異都會放到暫存區中。

  3. --mixed(默認):重置位置的同時,只保留Working Tree工作目錄的內容,但會將 Index暫存區Repository 中的內容更改和reset目標節點一致,因此原節點和Reset節點之間的【差異變更集】會放入Working Tree工作目錄中。所以效果看起來就是原節點和Reset節點之間的所有差異都會放到工作目錄中。

使用場景:

  1. --hard:(1) 要放棄目前本地的所有改變時,即去掉所有add到暫存區的文件和工作區的文件,可以執行 git reset -hard HEAD 來強制恢復git管理的文件夾的內容及狀態;(2) 真的想拋棄目標節點后的所有commit(可能覺得目標節點到原節點之間的commit提交都是錯了,之前所有的commit有問題)。

  2. --soft:原節點和reset節點之間的【差異變更集】會放入index暫存區中(Staged files),所以假如我們之前工作目錄沒有改過任何文件,也沒add到暫存區,那么使用reset --soft后,我們可以直接執行 git commit 將 index暫存區中的內容提交至 repository 中。為什么要這樣呢?這樣做的使用場景是:假如我們想合並「當前節點」與「reset目標節點」之間不具太大意義的 commit 記錄(可能是階段性地頻繁提交,就是開發一個功能的時候,改或者增加一個文件的時候就commit,這樣做導致一個完整的功能可能會好多個commit點,這時假如你需要把這些commit整合成一個commit的時候)時,可以考慮使用reset --soft來讓 commit 演進線圖較為清晰。總而言之,可以使用--soft合並commit節點

  3. --mixed(默認):(1)使用完reset --mixed后,我們可以直接執行 git add 將這些改變果的文件內容加入 index 暫存區中,再執行 git commitIndex暫存區 中的內容提交至Repository中,這樣一樣可以達到合並commit節點的效果(與上面--soft合並commit節點差不多,只是多了git add添加到暫存區的操作);(2)移除所有Index暫存區中准備要提交的文件(Staged files),我們可以執行 git reset HEADUnstage 所有已列入 Index暫存區 的待提交的文件。(有時候發現add錯文件到暫存區,就可以使用命令)。(3)commit提交某些錯誤代碼,或者沒有必要的文件也被commit上去,不想再修改錯誤再commit(因為會留下一個錯誤commit點),可以回退到正確的commit點上,然后所有原節點和reset節點之間差異會返回工作目錄,假如有個沒必要的文件的話就可以直接刪除了,再commit上去就OK了。



轉自:https://www.jianshu.com/p/c2ec5f06cf1a

 

---------------------------------------------------------------------------------

關注微信公眾號即可在手機上查閱,並可接收更多測試分享~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM