git reset 有三種模式:git reset [--soft | --mixed | --hard] [HEAD]
參考:https://www.runoob.com/git/git-reset.html
--mixed
- --mixed 為默認(rèn),可以不用帶該參數(shù),用于重置暫存區(qū)的文件與上一次的提交(commit)保持一致,工作區(qū)文件內(nèi)容保持不變。
1、 git reset c27948b75a54651bd57058c417a53d4216ea5389 等價于git reset mixed c27948b75a54651bd57058c417a53d4216ea5389
2、git reset HEAD^ # 回退所有內(nèi)容到上一個版本
3、git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一個版本
4、git reset 052e # 回退到指定版本
5、實體需求操作:需要回退到箭頭指向的這個版本 head:c27948b75a54651bd57058c417a53d4216ea5389
image.png
1、git reset c27948b75a54651bd57058c417a53d4216ea5389 暫存區(qū)回退,工作區(qū)文件內(nèi)容保持不變
2、git checkout . 確認(rèn)工作區(qū)文件是否需要,不需要使用checkout .
3、git push --force git要強(qiáng)制覆蓋,那么可以使用--force命令。
4、git status 如果有添加的文件可能需要手動刪除 (C#代碼已經(jīng)忽略掉的)
--soft
- --soft 參數(shù)用于回退到某個版本:
1、git reset --soft HEAD
--hard
- --hard參數(shù)撤銷工作區(qū)中所有未提交的修改內(nèi)容,將暫存區(qū)與工作區(qū)都回到上一次版本,并刪除之前的所有信息提交:
換句話說,就是你的沒有commit的修改會被全部擦掉。
reset --hard 不僅可以撤銷提交,還可以用來把 HEAD 和 branch 移動到其他的任何地方。參考:http://www.itdecent.cn/p/c2ec5f06cf1a
git reset --hard HEAD
git reset –hard HEAD~3 # 回退上上上一個版本
git reset –hard bae128 # 回退到某個版本回退點之前的所有信息。
git reset --hard origin/master # 將本地的狀態(tài)回退到和遠(yuǎn)程的一樣
注意:謹(jǐn)慎使用 –hard 參數(shù),它會刪除回退點之前的所有信息。
總結(jié):
--hard:重置位置的同時,直接將 working Tree工作目錄、 index 暫存區(qū)及 repository 都重置成目標(biāo)Reset節(jié)點的內(nèi)容,所以效果看起來等同于清空暫存區(qū)和工作區(qū)。
--soft:重置位置的同時,保留working Tree工作目錄和index暫存區(qū)的內(nèi)容,只讓repository中的內(nèi)容和 reset 目標(biāo)節(jié)點保持一致,因此原節(jié)點和reset節(jié)點之間的【差異變更集】會放入index暫存區(qū)中(Staged files)。所以效果看起來就是工作目錄的內(nèi)容不變,暫存區(qū)原有的內(nèi)容也不變,只是原節(jié)點和Reset節(jié)點之間的所有差異都會放到暫存區(qū)中。
--mixed(默認(rèn)):重置位置的同時,只保留Working Tree工作目錄的內(nèi)容,但會將 Index暫存區(qū) 和 Repository 中的內(nèi)容更改和reset目標(biāo)節(jié)點一致,因此原節(jié)點和Reset節(jié)點之間的【差異變更集】會放入Working Tree工作目錄中。所以效果看起來就是原節(jié)點和Reset節(jié)點之間的所有差異都會放到工作目錄中。
