Git reset 命令有三個主要選項:git reset --soft; git reset --mixed; git reset --hard;
git reset --soft
將HEAD引用指向給定提交。索引(暫存區)和工作目錄的內容是不變的,在三個命令中對現有版本庫狀態改動最小。
git reset --mixed(git reset默認的模式)
HEAD引用指向給定提交,并且索引(暫存區)內容也跟著改變,工作目錄內容不變。這個命令會將索引(暫存區)變成你剛剛暫存該提交全部變化時的狀態,會顯示工作目錄中有什么修改。
git reset --hard
HEAD引用指向給定提交,索引(暫存區)內容和工作目錄內容都會變給定提交時的狀態。也就是在給定提交后所修改的內容都會丟失(新文件會被刪除,不在工作目錄中的文件恢復,未清除回收站的前提)。
用表格看起來會更清楚些:
操作一下看一下實際效果:
首先在一個版本庫中修改追蹤文件,然后提交,description叫做 add button
使用git log 查看歷史提交
copy記錄add button 的前一次提交 add label 的哈希ID “7c5a658fbceb904ad877c4254d183e68aed1ddd0”,作為我們reset的給定提交。
git stauts 查看一下當前版本庫中文件狀態
顯示nothing to commit ,在add button 提交后未對版本庫中文件做修改
執行git reset --soft 7c5a658fbceb904ad877c4254d183e68aed1ddd0 命令,然后使用git status 查看文件狀態。
然后再使用git log 查看歷史提交記錄。
會發現add button 已經沒有了,版本庫已經回滾到add label提交的狀態了,但是在我們add button 提交修改的文件 里面修改的內容沒有丟失,只是回到了未提交的狀態。
將文件再次提交,同樣取名add button ,繼續git reset --mixed 操作。
同樣是回滾到了add button 之前的add label 提交。被修改的文件內容也沒有丟失,但是修改的文件為紅色了(未執行add 操作)。
將文件再次提交,同樣取名add button ,繼續進行git reset --hard 操作。
執行完git reset --hard 命令后,使用git status 查看文件狀態,回滾到add label 提交,add button被修改的文件內容已經沒有了,丟失了。版本庫中的文件已經完全回到剛提交完add label時的狀態。
git reset 根據需要使用不同的命令,使用 --hard時一定考慮回滾后文件的丟失!