• git 回滚代码踩坑


    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已经不能用了。因为本地和远端的历史已经乱了。废弃之!

  • 相关阅读:
    seq2seq+attention实战:基于seq2seq+attention实现文本摘要
    WebDAV之葫芦儿·派盘+言叶
    GIT使用
    Linux的历史背景和基本指令
    Shader中的渲染路径LightMode
    Super Resolve Dynamic Scene from Continuous Spike Streams论文笔记
    使用 adb 对 Android 声音控制全面适配
    编译并调试第一个so动态链接库文件
    Spring 基于注解的容器配置有哪些?
    交换机和路由器技术-21-RIP路由协议
  • 原文地址:https://blog.csdn.net/liuniansilence/article/details/125996250