• [问题解决方案](多人共同合并场景)git已merge到master分支代码且被同事代码覆盖如何回退


    场景

    master分支自己开发的需求branch_a已经合并push,但是代码出现错误或者暂时不需要上线,此时同事A,与B 都在这之后提交了代码,怎么办。(master分支受保护不能回退,即使可以回退也需要联系已合并分支代码的同事重新合并,比较麻烦且容易出错)。楼主这边合并的代码涉及到第三方一起上线,因为比较紧急的回滚,所幸改动不大,就重新new分支,把改动的部分先剔除掉重新上线。回过头来找解决方案。

    已经被同事代码覆盖的解决方案(无需强制合并权限)

    git revert a6d1c4b5(回退版本的commitid 一般输前5位即可)
    
    • 1

    在这里插入图片描述

    该命令是剔除非合并分支代码的commit,如果是 合并提交 的commit 需使用下面这条。(什么是合并分支 合并分支即为合并某个分支后在master生成的commit)

    git revert -m 1 a6d1c4b5(回退版本的commitid 一般输前5位即可)
    
    • 1

    -m 后面一般填1 即可,1 代表merge前master分支代码的最后一次快照。2代表merge分支的上一次commit快照。git revert 做的是剔除哪俩个commit版本之间的改动,当然是回到merge前的最后一次快照。如果还不懂,可看这篇点这里

    // 获取当前 合并提交 commit的父分支
    git cat-file -p [MERGE_COMMIT_ID]将按顺序显示父分支。列出的第一个-m 1是第二个-m 2。
    
    • 1
    • 2

    代码revert后又需要重新启用怎么办

    使用 git revert 命令重新提交剔除后的代码,可是开发的需求还在commit2上面,这个时候在合并之前的分支会提示没有更改的东西,因为之前的commit已经提交过了。这个时候怎么办呢 revert revert的commitId即可

    git revert commit5(图内的第五次提交)
    
    • 1

    如果是未受保护分支代码的回退且只有你一人合并的代码 可以直接使用下面的命令即可

    git reset --hard a6d1c4b5(回退版本的commitid 一般输前5位即可)
    // 强制提交
    git push -f
    
    • 1
    • 2
    • 3

    该命令会将本地分支代码回退到指定的commitId ,然后需要强制重新提交。适用于快速回退的那种情况
    详细可以了解 git撤销已push的代码
    楼主拿下图举例,如果commit3和commit4都是提交的错误代码 直接
    git reset --hard commit2Id 本地分支代码就会回到commit2的版本。
    之后 git push -f 强制提交就可以了。不过这样做的话commit3和commit4提交的代码就会丢失。做之前先备份一次分支。
    在这里插入图片描述

    本命令适用于自己一个人开发或者目前只有自己提交代码的分支(如果是master分支,不能 git push -f 强制提交,如果已经提交到master分支且不能强制提交的情况不适用)

    如果只是commit没有push 剔除错误commit的方法

    git reset --soft a6d1c4b5(回退版本的commitid 一般输前5位即可)
    
    • 1

    **该命令适用于还没有提交到远端分支的情况。**在提交代码的时候,commit之后,然后我又在工作区添加了东西,这时候突然发现,上一次的commit有错误的文件,需要重新修改,但是我添加的东西又不想丢失,而且我想修改上一次的提交,这时候可进行git reset --soft 版本号
    在这里插入图片描述

    如图所示,git reset --soft commit2 后,commit3和commit4代码还会在本地,只是撤销了commit,最终再提交就变成commit5。这个命令不会丢失代码。但是如果代码已经合并到远程分支就需要用到git pull(解决冲突后提交)或者git push -f 强制提交。

    如何查看commitId

    如何查看commitid

    希望本文可以帮到你。

  • 相关阅读:
    1.15.C++项目:仿muduo库实现并发服务器之HttpRequest和HttpResponse模块的设计
    Python:Flask使用全局变量g传递数据
    logcat日志文件分析
    C/C++内存管理
    加密项目是否采用DAO模式 首先考量这8个因素
    linux进阶-文件目录
    SpringBoot 使用Logback日志框架
    cpp转matlab程序,并在python中调用
    修改node_modules中安装的依赖(如第三方ui组件样式)并在下次安装时保留
    基于Prometheus快速搭建网络质量监控平台
  • 原文地址:https://blog.csdn.net/YiQieFuCong/article/details/128173316