參考了廖雪峰Git教程:
版本回退 https://www.liaoxuefeng.com/wiki/896043488029600/897013573512192
撤銷修改 https://www.liaoxuefeng.com/wiki/896043488029600/897889638509536
版本回退
HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
回退到上一個commit:
git reset --hard HEAD^
直接指定commit id也是可以的。
拓展:reset的三種模式
reset三種模式區別和使用場景
作者:carway區別:
--hard:重置位置的同時,直接將 working Tree工作目錄、 index 暫存區及 repository 都重置成目標Reset節點的內容,所以效果看起來等同於清空暫存區和工作區。
--soft:重置位置的同時,保留working Tree工作目錄和index暫存區的內容,只讓repository中的內容和 reset 目標節點保持一致,因此原節點和reset節點之間的【差異變更集】會放入index暫存區中(Staged files)。所以效果看起來就是工作目錄的內容不變,暫存區原有的內容也不變,只是原節點和Reset節點之間的所有差異都會放到暫存區中。
--mixed(默認):重置位置的同時,只保留Working Tree工作目錄的內容,但會將 Index暫存區 和 Repository 中的內容更改和reset目標節點一致,因此原節點和Reset節點之間的【差異變更集】會放入Working Tree工作目錄中。所以效果看起來就是原節點和Reset節點之間的所有差異都會放到工作目錄中。
鏈接:https://www.jianshu.com/p/c2ec5f06cf1a
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
重新回到最新版本:
git reset --hard 最新版本commit id
如果忘記了新版本commit id,可以通過
git reflog
查看。
撤銷修改
撤銷工作區修改
git checkout -- file
命令中的--很重要,沒有--,就變成了“切換到另一個分支”的命令
撤銷暫存區修改
git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。
git reset HEAD <file>
小結
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。