git已经推送push到gitlab/github代码,如何回退版本——记一次git push -f 后的回滚操作

1. 由git push -f 引发的惨案
本来今天是合并一下同事push到了gitlab上的master分支,加上自己改的一些部分以后push覆盖,但是出现了一个问题:

error: failed to push some refs to XXX'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

其实是告诉我我的本地分支,是比远程分支老的,如果我把本地分支push上去,会导致远程分支丢失他最新的提交。
这个报错怎么解决呢?
首先查看本地的分支到底是不是落后于远程,是不是,一不小心切换到了4~5天才提交过的老分支~说不定是git善意的提醒;
如果本地分支切换的没有问题,确实是最新的,可以使用push前先将远程repository修改pull下来,然后:

$ git pull origin master
$ git push -u origin master//指定远程主机名为默认

如果这样还是不行,使用强制push的方法,git push -f表示将目前自己本机的代码库推送到远端,并覆盖

$ git push -u origin master -f 

但是千万谨慎!因为这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。
我就很错误的使用了这个指令,看到gitlab上同事的提交记录都消失了,剩下四天以前的提交记录。

2. 如何回退远程库gitlab/github上已经push的版本
gitlab上同事的提交记录还在,找到对应的commit id
在这里插入图片描述
在本地新建一个分支test,然后在这个新分支上回滚同事的提交版本:

git reset --soft(或者--hard) commit id

然后在这个test分支上,合并你自己本地修改了的新代码(在这里,我的本地代码已经merge过远程的master了,所以合并过程==在同事的新master上加上我自己修改的部分)

git merge 《local》

如果merge没有冲突,那就再删除一行空格,做一个走过场的commit;有冲突就合并冲突,然后add commit
最后把在本地还原好的分支,push到master上,远程错误,老旧的push记录就被新的覆盖了!完工。
在这里插入图片描述
危机解除!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值