真實測試案例:
1、可以通過git log查看當前版本指向
2、然后 git reset --hard HEAD~1(也可以是其他退回語句) 退回一個版本
3、可以通過git log再次查看,指向應該變為上一個版本了
4、直接git push origin 分支 --force強推,因為就算commit也會提示讓你pull代碼,這是不行的
其實兩步就可以完成:第一步:退回版本,第二步:強推上去就可以了
一、git reset退回指令分為兩種
1、git reset --soft
表示只是改變了HEAD的指向,本地代碼不會變化,我們使用git status依然可以看到,同時也可以git commit提交
2、git reset --hard
表示改變HEAD指向的時候,同時改變本地源碼,不僅僅指向變化了,代碼也回到了那個版本時的代碼
二、兩者的語法一樣:
(1)HEAD相當與當前、HEAD~1 退回上一個版本、HEAD~2 退回上兩個版本、、、以次類推
git reset --hard HEAD~1 /或者/ git reset --soft HEAD~1
(2)通過版本號進行退回指定版本, git log 或者 git reflog 可以查看當前的版本指向和版本號
git reset --hard 版本號 /或者/ git reset --soft 版本號
三、退回之后:
1、如果使用--soft回退的
(1)使用git log或git reflog驗證下,可以看到HEAD已經指向上一個commits了
(2)再使用git status看看,發現代碼還在緩存區中
這時候就好辦了,我們選擇很多,可以直接修改代碼,再commit,也可以取消git add 命令
2、如果使用--hard回退
這時候需要直接commit,推送到遠程庫中就行
(push推送,改變遠程倉庫的版本時,會因為版本差異問題而無法推送,
使用指令: git push origin 分支 --force 強制推送至遠程分支,就大功告成)
注意:1、兩者退回后只是改變的本地,無法影響遠程庫,需要push到遠程庫
2、回退后因為遠程庫中未改變,拉取代碼時會拉取最新代碼覆蓋本地