2021.08.10
背景:
发版日,下午把开发分支benz
合入到master
分支了,值班人又基于master
分支拉了rb
分支了,同期上线的还有其他4个人的分支。
我合并代码master
期间,由于和master
分支有冲突,先merge master into myBranch,然后解决冲突,再merge进master
的。
然鹅,到了晚上突然通知,其他人的上线取消。但是我需要单独上线。所以需要回滚其他人的代码。
bad 操作一:
在本地benz分支查看git log,最顶上是一个merger操作,之后再没有操作了。所以直接本地git reset --hard
到最后一次我的实际提交。然后push到远端,被拒绝!
理由:no-diff。
好吧,随便改点啥,再push。成功!但是git status
时候发现
这……远端和本地各自偏离了。
因为reset的是本地,远端的还在。其实应该要把远端的也reset掉的,但git操作一般不能重置远端,风险大。
这条路失败!
bad 操作二:
在远端新拉一个备份分支benz_01
,本地git fetch & git checkout benz_01
。
然后在本地git revert ${merge操作的commitId}
。本地git log
看,好像成功了。merge的记录没了。
但是查看了别人的提交记录里的文件,竟然有的人的文件在我这个分支里还是存在的。没有revert干净??
不知道怎么混进来,但是宣告失败!
good 操作来了:
【失败原因】都是因为远端混入了别人的代码。那么怎么想办法把远端的代码踢掉呢,我又不能reset远端代码。
【解决方案】
1、直接在本地新建备份分支,而不是在远端新建。git checkout -b benz_02
2、git log
查看一下本地日志,跟之前的初始日志一模一样。然后本地git reset --hard
到我merge节点的前一个commit-id。
3、git log
看一下,很好。多余的merge节点已经没了。再直接本地直推远端git push origin benz_02
。
完工,在远端检查一下benz_02
和其他人的分支,不再有任何diff了。终于踢掉别人的代码。
然后基于前一次上线的rb分支,重新拉一个新的rb分支,单独合入我的代码。准备上线。
之前的原始分支benz已经不能用了。因为本地和远端的历史已经乱了。废弃之!