Git reset 撤銷本地/遠程提交版本


本文復制文本:https://blog.csdn.net/qq_28018283/article/details/77877986
防止以后文章流失

在合作的過程中,難免會遇到需要回滾的時候,分為本地和遠程回滾。

某天,程序員 小A 喝了很多很多很多的酒,然后開始寫代碼 。

A開始改代碼中一個文件,改了半個小時,運行之后,發現已經不知道自己在寫什么,想 把這個文件恢復到該之前的樣子

git checkout xxx.file   //恢復單個文件

A恢復了之后,思路變的清晰了不少,下筆如神,重新改好, commit 了工作區的變動,這時A發現: 我的天,我都改了什么?這代碼可太 low 了。我可不能提交我丑陋的代碼!,他做了撤銷

git reset --soft HEAD^ //撤銷 緩存區

然后又接着修改了代碼,終於再三思量,提交了三次 commit 。

A 提交了三次代碼,已經是凌晨2點,A去線上 pull 之后跑了一遍項目,瞬間頭腦清醒,發現由於環境不一致,導致了 bug ,思考之后,發現暫時無法解決,只好回滾,小A首先將自己本地代碼倉庫回滾到,上一次 的版本,可以通過 reset 來回滾。

首先需要知道之前提交的版本號,小A通過 git log 查看提交版本

commit 25de78c066faccf5732dc86c62ebd9e85a7d6015
Author: XXX <xxxx@xx.com>
Date:   Wed Sep 6 15:39:58 2017 +0800

最新一次提交

commit 85c16a9c048a035c4796f373b8816c0b2f017d18
Author: XXX <xxxx@xx.com>
Date:   Wed Sep 6 13:33:56 2017 +0800

上一次提交


commit 9425c47b6cb54cdb06127749488bc48243832ad7
Author: XXX <xxxx@xx.com>
Date:   Wed Sep 6 13:33:56 2017 +0800

倒數第三次提交
...
git reset --hard HEAD^ //撤銷工作區到上一個版本

小A又覺得或許應該將代碼回滾到 上兩次 的版本

git reset --hard 9425c47b6 //版本號可以省略寫
或
git reset --hard HEAD~2

小A 一看,居然將本地版本回滾到了倒數三次的版本,他生氣給了自己一巴掌。然后

git reset --hard  85c16a9c

終於將版本恢復到了倒數第二次提交,可氣的是,小A太過激動,把水杯打翻了,電腦 cila 就關機了,小A 顫抖着雙手,終於把電腦重新開啟,他只想知道自己剛剛reset 了沒有,於是小A

git reflog
25de78c HEAD@{0}: reset: moving to 85c16a9c

看到了,最近的操作記錄,已經會滾到了倒數第二次提交,這時候,A將他本地的代碼, 回滾到了他想到的版本,但是遠程倉庫還是停留在最新版本,他 嘆了口氣,-f 推上去,這樣遠程的版本就被撤銷了。

git push -f 

注:有些 git server 不允許這樣做,比如gitlab ,但是可以通過管理員開啟。

這樣,A 就將本地和遠程master 都恢復到了上兩次提交的版本。小A迷迷糊糊的把 QQ 簽名改成 “喝酒不寫碼,寫碼不喝酒” ,然后便一頭栽進枕頭,呼呼入睡。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM