github通过revert还原已经merge的代码
⽂章⽬录
1 问题
dev分⽀上出现过去删除的代码
berze初步定位后,是⼀位同事merge过旧的代码后,带着新的改动,提交了⼀次pr,并且此次pr已经merge到了公共分⽀上
2 痛苦过程
星期二的英语单词第⼀步只能定位到某次pr,可以看到提交了已删除的⽂件,同时也包含新的修复
imf卡恩但这个pr 能够看到很多commit,不确定,是不是要⽤很多commitId进⾏revert
第⼆步是去看整个项⽬的commit记录,希望确定是哪个commit引⼊的,但依然没有找到networking
找了⼀下重新出现⽂件的git history, 都是update记录,没有看到add commit(痛苦)
eros
第三步向⼤佬求救,⼤佬说先查看⼀下重新出现的⽂件夹的git history, 发现最新的历史是对应同事的⼀次merge操作, 点开了merge 的两个分⽀的改变,发现其中⼀个分⽀添加了这个⽂件夹
⾄此,对应的commit操作已经定位
回到整个项⽬的这次commit, 点开历史查看,其中⼀个分⽀的变更包括了相关已删除⽂件的添加
注:对于merge操作,两个分⽀对它⽽⾔是平等的,虽然其中⼀个分⽀是添加⽂件,但另⼀个分⽀是有这个⽂件的,因此merge的结果认为这不是⼀个添加操作,因此从merge结果,包括github上,看不出来是⼀个添加的commit, 这也是让⼈头痛的地⽅
3 解决操作
问题定位后,确认是⼀个merge commit 的 revert
使⽤revert命令
git revert c53f0d5a -m 2
c53f0d5a 是整个commit的id
parent的复数形式
2 表⽰需要撤销的分⽀,这⾥因为是第⼆个分⽀添加了已删除⽂件
Merge代码
silina出现冲突需要merge时,会出现三个框,左边是最新的代码,中间是那次merge的结果,右边是merge前的代码
之所以出现冲突,是因为,revert到merge前的代码(右边)的话,会丢失你新增的修改,所以git不会直接回到右边的版本,如果那次merge后,没有修改,git就不会让你解决冲突,⽽是直接还原为右边的版本
4 注意事项
在这个过程中,差点打算对本次pr进⾏ revert , 这是⾮常危险的
托福词汇串讲
⾸先这个pr包含了相关提交,⼀旦revert可能丢失,也要重新提交
其次,这次pr并不是根源,可能引发新的merge问题,胶囊公寓
最后,即使revert成功,相关同事在本地可能依旧不知如何操作,因为本地已经提交多个commit,同样需要进⾏相关的merge revert,重新commit,重新提交pull request
从中央分⽀处理revert后,所有同事,更新最新代码即可,⽐较⽅便
ttings