今天上午我在自己的开发环境上拉了一条新分支,提交了5个commit,最新提交的3个commit 我不想要了,那我该怎么退回到这3个commit之前的那个commit?
答:参考我在下面即将分享的“个人分支回滚”的内容。
我本地的分支通过 reset --hard 的方式做了代码回滚,想通过push的方式让远端的分支也一起回滚,执行push命令时却报错,该怎么办?
答:如果不加 -f 参数,执行 reset --hard 后,push会被拒绝,因为你当前分支的最新提交落后于其对应的远程分支。push 时加上 -f 参数代表强制覆盖。
线上产品包已经回滚到昨天的版本了,我清清楚楚地记得昨天我把发布分支上的代码也reset --hard到对应的commit了,怎么那几个有问题的commit今天又带到发布分支上了?真是要命!
答:集成分支不能用 reset --hard 做回滚,应该采用集成分支上新增commit的方式达到回滚的目的。
我刚刚在GitLab上接纳了一个合并请求(Merge Request),变更已经合入到master上了,但现在我发现这个合并出来的commit有较大的质量问题,我必须把master回滚到合并之前,我该怎么办?
答:可以在GitLab上找到那个合并请求,点击revert按钮。
刚刚线上A产品V6.2的包有问题,我已经把A的产品包回退到V6.1 版本了,请问发布分支上的代码也要回滚到V6.1对应的commit吗?
答:你可以在下文“哪些情况下需要回滚代码?”和“哪些情况下包的回滚无需回滚代码?”中找到答案。
产品包的回滚可以在我们公司持续交付云平台上执行,平台能不能也提供代码一键回滚的功能?这样我们回滚代码能相对轻松一些。
答:针对已上线发布的版本,我认为持续交付平台提供一键回滚的方式还是有必要的。这么做可以规范集成分支上线后代码回滚的行为,也能减少人为失误。具体做法可以参考我在下面给你分享的“集成分支上线后回滚”的内容。