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

场景

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

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

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

在这里插入图片描述

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

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

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

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

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

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

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

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

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

该命令会将本地分支代码回退到指定的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位即可)

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

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

如何查看commitId

如何查看commitid

希望本文可以帮到你。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值