Git reset 撤销本地/远程提交版本

某天,程序员 小A 喝了很多很多很多的酒,然后开始写代码 。

A开始改代码中一个文件,改了半个小时,运行之后,发现已经不知道自己在写什么,想 把这个文件恢复到该之前的样子

git checkout xxx.file   //恢复单个文件
  •  

A恢复了之后,思路变的清晰了不少,下笔如神,重新改好, commit 了工作区的变动,这时A发现: 我的天,我都改了什么?这代码可太 low 了。我可不能提交我丑陋的代码!,他做了撤销,这个撤销并不会把你代码删除,而是回到没有commit的状态,重新被git追踪-------zs

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 签名改成 “喝酒不写码,写码不喝酒” ,然后便一头栽进枕头,呼呼入睡。

猜你喜欢

转载自blog.csdn.net/qq_22978533/article/details/82692757