git revert别人的代码怎么办?

git revert别人的代码怎么办?

  相信大家在工作中都使用过git来作为版本控制工具。在多人协作的模式下,难免会在不经意间(比如喝多了,困了,工作的烦了)有些奇奇怪怪的操作。比如我在前两天就发生了一起由于git revert导致的惨案,不过好在解决了。在之前的工作中,我也遇到过由于git revert导致的问题,所以本着不能在同一个地方跌倒多次的原则,我在此记录下,不然迟早会死在这个东西手里。

背景描述

  首先讲一下前几天发生在我身上的故事。在团队内工作,如果大家负责同一个项目时,肯定是会分头行动的,因此除了主干分支release,预发布分支pre_release(可理解为小流量灰度分支,会在下一个发布的时间点合入release)以外,测试分支test,大家都会有各自的开发分支dev1, dev2, devn
  当时的场景是这样的:

  • 我的开发分支是dev1,在上线之前我先同步了pre-release上的代码,我本想要把我的分支提交至test上进行测试,结果由于我的失误,我把我的代码合并到了release上,在点了merge按钮之后(啪的一下,很快啊!),我发现情况不对,于是点了还原按钮(实际上就是执行了一次revert)操作。
  • 是不是觉得没问题?你觉得不会有问题的时候,问题就来了。由于已经合并过pre-release,因此我的merge操作已经把其他同事的已开发完成且合入pre-release的代码合入了release,所以在revert时,就把其他同事的代码连带一起revert掉了,导致他们第二天的功能全部没有上线

因此,当不得不进行revert操作时,发现有问题,如何进行代码的还原?

如何操作?

  • 方法一,reset releaseHEAD指针,然后强制推送。
    • 首先通过git log查看merge前的commitId
    • 然后git reset [COMMIT ID]
    • git push -f origin release即可

  这种方式保证代码一定是之前未merge的版本,在此期间,其他人对于release的提交将会丢失,需要重新提交,但是由于pre-release分支的存在,不太会有人直接提交至release分支,所以一般也不需要重新提交。由于reset操作比较暴力,在推送前最好拉取一个clean的release分支,以免reset出错而导致代码无法恢复。

  • 方法二,将revert操作产生的merge request再次revert,然后删除掉自己的代码
    • 找到刚才的revert的提交记录,再次revert
    • 删除自己的代码(不要手动删除,这样是有问题的,要用pre-release或分支的同名文件进行覆盖写入)。这个环节有个比较难受的问题是,后续dev的代码会被合并至pre-release,在pre-release合并到release的时候,会发现,没有dev的代码,因为删除dev的代码,产生了提交记录。后续再上线时需要先git pullrelease然后把删除的代码再粘贴回去,重新测试上线

  这种方式比较费时,需要多次逐个文件粘贴代码,而且pre-release上的代码被提前合并至release

  在任何场景下,只要权限够用,我都推荐使用方法一进行操作,简洁快速,且不需要代码更改。

  如果非要使用方法二,我认为比较简单的做法是

  • dev代码测试通过后,先将dev的代码上线至pre-release
  • 观察没问题后,再revert之前的revert

  这样不需要进行代码的粘贴操作,前提是有100%的把握自己的代码在后面不会出现bug。
  最后,我想说的是,能不用git revert就别用git revert,不然即使知道上面的两种方法如何操作,但是是准确的操作出来,还是引入了误操作之后的额外误操作,未可知。时间就是生命,不能老是浪费在修复问题上面啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值