github通过revert还原已经merge的代码

1 问题

  • dev分支上出现过去删除的代码
  • 初步定位后,是一位同事merge过旧的代码后,带着新的改动,提交了一次pr,并且此次pr已经merge到了公共分支上

2 痛苦过程

  • 第一步只能定位到某次pr,可以看到提交了已删除的文件,同时也包含新的修复
    但这个pr 能够看到很多commit,不确定,是不是要用很多commitId进行revert
  • 第二步是去看整个项目的commit记录,希望确定是哪个commit引入的,但依然没有找到
    找了一下重新出现文件的git history, 都是update记录,没有看到add commit(痛苦)
  • 第三步向大佬求救,大佬说先查看一下重新出现的文件夹的git history, 发现最新的历史是对应同事的一次merge操作, 点开了merge的两个分支的改变,发现其中一个分支添加了这个文件夹

至此,对应的commit操作已经定位
回到整个项目的这次commit, 点开历史查看,其中一个分支的变更包括了相关已删除文件的添加
在这里插入图片描述

注:对于merge操作,两个分支对它而言是平等的,虽然其中一个分支是添加文件,但另一个分支是有这个文件的,因此merge的结果认为这不是一个添加操作,因此从merge结果,包括github上,看不出来是一个添加的commit, 这也是让人头痛的地方

3 解决操作

  • 问题定位后,确认是一个merge commit 的 revert
  • 使用revert命令

git revert c53f0d5a -m 2

  • c53f0d5a 是整个commit的id

  • 在这里插入图片描述

  • 2 表示需要撤销的分支,这里因为是第二个分支添加了已删除文件

Merge代码

  • 出现冲突需要merge时,会出现三个框,左边是最新的代码,中间是那次merge的结果,右边是merge前的代码
    在这里插入图片描述

  • 之所以出现冲突,是因为,revert到merge前的代码(右边)的话,会丢失你新增的修改,所以git不会直接回到右边的版本,

  • 如果那次merge后,没有修改,git就不会让你解决冲突,而是直接还原为右边的版本

4 注意事项

  • 在这个过程中,差点打算对本次pr进行 revert , 这是非常危险的
  • 首先这个pr包含了相关提交,一旦revert可能丢失,也要重新提交
  • 其次,这次pr并不是根源,可能引发新的merge问题,
  • 最后,即使revert成功,相关同事在本地可能依旧不知如何操作,因为本地已经提交多个commit,同样需要进行相关的merge revert, 重新commit,重新提交pull request

从中央分支处理revert后,所有同事,更新最新代码即可,比较方便

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值