git 回滚代码踩坑

本文记录了一次在Git中处理紧急上线情况的错误操作及正确解决方案。作者在合并开发分支到master并解决冲突后,因上线计划变更需回滚他人代码。尝试了直接本地回滚和使用revert操作均未成功。最终通过新建本地备份分支,回滚到合并点前的提交,并安全推送,成功清理了远端代码。同时,基于前次上线分支创建新分支准备单独上线。
摘要由CSDN通过智能技术生成

2021.08.10
背景:
发版日,下午把开发分支benz合入到master分支了,值班人又基于master分支拉了rb分支了,同期上线的还有其他4个人的分支。
我合并代码master期间,由于和master分支有冲突,先merge master into myBranch,然后解决冲突,再merge进master的。

然鹅,到了晚上突然通知,其他人的上线取消。但是我需要单独上线。所以需要回滚其他人的代码。

bad 操作一:
在本地benz分支查看git log,最顶上是一个merger操作,之后再没有操作了。所以直接本地git reset --hard到最后一次我的实际提交。然后push到远端,被拒绝!
理由:no-diff。
好吧,随便改点啥,再push。成功!但是git status时候发现
image.png
这……远端和本地各自偏离了。
因为reset的是本地,远端的还在。其实应该要把远端的也reset掉的,但git操作一般不能重置远端,风险大。
这条路失败!

bad 操作二:
在远端新拉一个备份分支benz_01,本地git fetch & git checkout benz_01
然后在本地git revert ${merge操作的commitId}。本地git log 看,好像成功了。merge的记录没了。
但是查看了别人的提交记录里的文件,竟然有的人的文件在我这个分支里还是存在的。没有revert干净??
不知道怎么混进来,但是宣告失败!

good 操作来了:
【失败原因】都是因为远端混入了别人的代码。那么怎么想办法把远端的代码踢掉呢,我又不能reset远端代码。
【解决方案】
1、直接在本地新建备份分支,而不是在远端新建。git checkout -b benz_02
2、git log查看一下本地日志,跟之前的初始日志一模一样。然后本地git reset --hard到我merge节点的前一个commit-id。
3、git log看一下,很好。多余的merge节点已经没了。再直接本地直推远端git push origin benz_02

完工,在远端检查一下benz_02和其他人的分支,不再有任何diff了。终于踢掉别人的代码。
然后基于前一次上线的rb分支,重新拉一个新的rb分支,单独合入我的代码。准备上线。

之前的原始分支benz已经不能用了。因为本地和远端的历史已经乱了。废弃之!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值