1. 程式人生 > 實用技巧 >Git reset 撤銷本地/遠端提交版本

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 <[email protected]>
Date:   Wed Sep 
6 15:39:58 2017 +0800 最新一次提交 commit 85c16a9c048a035c4796f373b8816c0b2f017d18 Author: XXX <[email protected]> Date: Wed Sep 6 13:33:56 2017 +0800 上一次提交 commit 9425c47b6cb54cdb06127749488bc48243832ad7 Author: XXX <[email protected]> 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 簽名改成 “喝酒不寫碼,寫碼不喝酒” ,然後便一頭栽進枕頭,呼呼入睡。