引言
大家在版本迭代过程中,是否遇到过开发好的需求,都已经合并到Master分支等待发布后,临时通知不需要上线了的情况。这个时候一般会要求只上一部分紧急功能或者别的新功能,那么这个时候就需要用到Git的Reset以及Cherry-Pick功能。
代码准备
首先我们先准备好三个分支
UAT:作为我们的开发分支(防杠:仅用于演示,UAT在日常开发过程中也不可以直接提交代码的)
Master:作为发布分支
feature-20230630-dev:作为我们的HotFix分支
初始化
首先我们从检查Master分支的代码:
提交feature-20230630-dev
然后切换到 feature-20230630-dev 分支,提交我们的HotFix代码
提交UAT
然后切换到UAT分支,UAT分支上我们模拟日常开发,进行多次代码提交
代码合并
然后我们将UAT代码合并到Master分支
代码回滚
这时候你们的产品就跑过来了,气势汹汹的跟你讲,这次发布延期了,生产上发现了一个重大BUG,需要立即修复并发布(即上文的feature-20230630-dev分支的代码),那么首先我们需要将Mater分支代码进行回退
我们选择分支origin/master,选择相应的提交记录,比如我这次要回滚的是问题1-问题4,那么我选择的提交记录应该为问题1之前的一次提交(即:初始化代码),右击选择 “Reset Current Branch To Here”
弹窗中,可以选择选择 “Hard”(强制)选项来完全回滚到该提交,或选择 “Soft”(软性)选项来回滚到该提交并保留更改,这里我选Hard即可
切换到Local的Mater分支,可以看到提交记录已被回滚
由于当前只回滚了本地的代码,这时候如果后悔了或者回滚错提交了,直接pull一下远程代码即可
推送到远程
此时如果直接使用git push,会将远程的记录merge下来,所以此时需要使用
git push --force
强制提交到远程
Cherry-Pick
现在就剩最后的一步了,将我们需要的代码cherry-pick到master分支,选择feature-20230630-dev
右击我们先要合并过去的提交,选择Cherry-Pick,即可合并该次提交到当前分支
最后推送到远程
下班!!!