zoukankan      html  css  js  c++  java
  • git把测试分支误合并到开发分支后的回滚操作

    场景:正常开发流程,我们会从master分支上拉一个新分支作为开发分支进行开发,但是在开发过程中有伙伴把测试分支合并到了开发分支,最后如果把开发分支合并回master分支的话,master分支会多了测试分支的代码,这些代码可能在其他开发模块还没上线,可能会导致生产环境出现异常,那么,如何从开发分支撤销掉从测试分支合并过来的代码呢?

    分支如下图

     

    思路:如上图,先在dev4上撤销commit回滚到dev3上,然后把回滚的代码放到贮存区,再撤销dev3这个commit,并且不要dev3的代码(因为dev3的代码是从test分支合并过来的),这时候dev的分支回到了dev2,再把贮存区的代码还原回来(即dev4的代码),再作为一个新的开发分支推送到远程分支,然后这个就是没有了测试分支的代码的开发分支
    具体的操作验证
    1.查看日志,记录需还原的commit版本号, git log --pretty=oneline
    git log --pretty =oneline


    2.撤销已提交的commit,回滚到测试分支误合并到开发分支的commit版本
    git reset --mixed 回滚版本号

    3.再次使用git log可以看到当前HEAD指向了测试分支误合并到开发分支的commit版本

    这时候我们的代码区多了很多未暂存的文件

    4.把撤销的代码文件暂存起来
    git stash save ‘保存撤销的代码’

    5.再撤销当前commit并且不保留代码(因为这里的代码是测试分支的,我们不需要这些代码)
    git reset --hard HEAD^


    6.把贮存区的代码重新应用出来
    git stash list
    git stash apply stash@{0}

    7.这时候千万别pull代码,如果pull的话,HEAD指针又会指向远程的dev上最新的commit上,又会自动把测试分支的代码合并回来,直接把这个分支作为新的开发分支推送到远程仓库即可,然后用这个分支作为开发分支开发,最后把这个分支的代码合并回master分支,这时候就去掉了原来dev分支误合并的测试分支代码了,如图

     8.此时可选择在新建分支后将代码推送到远程,用这个新分支代替原分支进行开发,或选择删除当前远程分支把当前分支提交到远程如下:

    ①删除当前分支的远程分支

    $ git push origin :currentBranch 
    $ //或者这么写git push origin --delete currentBranch

    ②把当前分支提交到远程

    $ git push origin currentBranch

    注:
    1.撤销上次的commit :HEAD~1或者HEAD^
    2.git reset --mixed HEAD^
    3.git reset --soft HEAD^
    4.git reset --hard HEAD^
    5.执行完git reset --mixed HEAD^命令后在idea可以看到已经撤销了刚刚的commit,文件又变回未提交的蓝色了
    6.mixed 相当于代码保留,撤销git commit,同时撤销git add,代码回到未暂存区
    7.soft相当于代码保留,撤销git commit ,不撤销git add,代码回到暂存区
    8.hard不保留代码,撤销git commit,同时撤销git add,回到了上一次commit的状态
    9. git relog 查看历史操作

    还有一种常见的场景,本来在开发分支进行开发,然后切换到测试环境,合并了代码,但是这时候忘了切回开发分支,在测试分支提交了代码,这就导致开发分支少了这次提交的代码

    处理方式一
    记录自己操作过的代码,切换到开发分支,手动把代码补充完整,最笨的方法

    处理方式二
    在测试分支撤销掉当前提交的commit(git reset --mixed HEAD^),当然远程的测试分支并没有撤销,然后切回开发分支,把刚撤销的代码在开发分支重新提交一次即可,最后再开发分支合并到测试分支也不会有任何问题,因为修改的代码文件是一样的
    ————————————————

  • 相关阅读:
    关于form表单的相同name问题
    MySQL数据库视图
    Blazor
    查看Oracle正在执行的任务
    比较不错的几款开源的WPF Charts报表控件
    Raft算法
    EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
    systemd、upstart和system V 枯木
    MRTG生成首页报错解决方法 枯木
    dd备份和恢复 枯木
  • 原文地址:https://www.cnblogs.com/chenhuichao/p/14820230.html
Copyright © 2011-2022 走看看