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
在这里插入图片描述

  1. 撤销已提交的commit,回滚到测试分支误合并到开发分支的commit版本
    git reset --mixed 回滚版本号
    在这里插入图片描述
  2. 再次使用git log可以看到当前HEAD指向了测试分支误合并到开发分支的commit版本
    在这里插入图片描述
    这时候我们的代码区多了很多未暂存的文件
    在这里插入图片描述
  3. 把撤销的代码文件暂存起来
    git stash save ‘保存撤销的代码’
    在这里插入图片描述
  4. 再撤销当前commit并且不保留代码(因为这里的代码是测试分支的,我们不需要这些代码)
    git reset --hard HEAD^

在这里插入图片描述

  1. 把贮存区的代码重新应用出来
    git stash list
    git stash apply stash@{0}
    在这里插入图片描述
  2. 这时候千万别pull代码,如果pull的话,HEAD指针又会指向远程的dev上最新的commit上,又会自动把测试分支的代码合并回来,直接把这个分支作为新的开发分支推送到远程仓库即可,然后用这个分支作为开发分支开发,最后把这个分支的代码合并回master分支,这时候就去掉了原来dev分支误合并的测试分支代码了,如图
    在这里插入图片描述

注:
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^),当然远程的测试分支并没有撤销,然后切回开发分支,把刚撤销的代码在开发分支重新提交一次即可,最后再开发分支合并到测试分支也不会有任何问题,因为修改的代码文件是一样的

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值