Git reset 命令有三個主要選項:git reset --soft; git reset --mixed; git reset --hard;
git reset --soft
將HEAD引用指向給定提交拄氯。索引(暫存區(qū))和工作目錄的內(nèi)容是不變的译柏,在三個命令中對現(xiàn)有版本庫狀態(tài)改動最小。
git reset --mixed(git reset默認的模式)
HEAD引用指向給定提交典唇,并且索引(暫存區(qū))內(nèi)容也跟著改變,工作目錄內(nèi)容不變介衔。這個命令會將索引(暫存區(qū))變成你剛剛暫存該提交全部變化時的狀態(tài),會顯示工作目錄中有什么修改赃泡。
git reset --hard
HEAD引用指向給定提交乘盼,索引(暫存區(qū))內(nèi)容和工作目錄內(nèi)容都會變給定提交時的狀態(tài)。也就是在給定提交后所修改的內(nèi)容都會丟失(新文件會被刪除僚碎,不在工作目錄中的文件恢復(fù)阴幌,未清除回收站的前提)。
用表格看起來會更清楚些:
操作一下看一下實際效果:
首先在一個版本庫中修改追蹤文件渊抽,然后提交议忽,description叫做 add button
使用git log 查看歷史提交
copy記錄add button 的前一次提交 add label 的哈希ID “7c5a658fbceb904ad877c4254d183e68aed1ddd0”栈幸,作為我們reset的給定提交。
git stauts 查看一下當(dāng)前版本庫中文件狀態(tài)
顯示nothing to commit 玩焰,在add button 提交后未對版本庫中文件做修改
執(zhí)行git reset --soft 7c5a658fbceb904ad877c4254d183e68aed1ddd0 命令昔园,然后使用git status 查看文件狀態(tài)并炮。
然后再使用git log 查看歷史提交記錄。
會發(fā)現(xiàn)add button 已經(jīng)沒有了荤西,版本庫已經(jīng)回滾到add label提交的狀態(tài)了,但是在我們add button 提交修改的文件 里面修改的內(nèi)容沒有丟失店展,只是回到了未提交的狀態(tài)秃流。
將文件再次提交柳弄,同樣取名add button ,繼續(xù)git reset --mixed 操作嚣伐。
同樣是回滾到了add button 之前的add label 提交萍丐。被修改的文件內(nèi)容也沒有丟失,但是修改的文件為紅色了(未執(zhí)行add 操作)基茵。
將文件再次提交壳影,同樣取名add button ,繼續(xù)進行git reset --hard 操作根灯。
執(zhí)行完git reset --hard 命令后掺栅,使用git status 查看文件狀態(tài),回滾到add label 提交桃笙,add button被修改的文件內(nèi)容已經(jīng)沒有了假抄,丟失了。版本庫中的文件已經(jīng)完全回到剛提交完add label時的狀態(tài)熏瞄。
git reset 根據(jù)需要使用不同的命令谬以,使用 --hard時一定考慮回滾后文件的丟失!