能否从master分支选取已有标签创建生产环境发布版本
答案
绝对不建议直接这么做,这么操作大概率会拿到不符合预期的代码版本,甚至搞出生产事故。
核心原因
- 首先搞懂Git标签的基本逻辑:标签是和提交哈希强绑定的静态标记,你在
release-1.1这类发布分支上打的标签,从创建开始就固定指向当时所在的release分支提交,不会跟着分支合并、变基这类操作自动“转移”到master分支的提交上。 - 正常把release分支合并到
master的时候,会生成一个全新的合并提交,哪怕合并全程没冲突,这个新提交和你之前在release分支上打标签的那个提交也根本不是同一个,你在master分支上根本选不到之前打在release分支上的标签对应的代码版本。 - 就算你合并的时候用了快进合并参数(
--ff-only),没生成新的合并提交,让master的提交线直接对齐到release分支打标签的那个提交,也不推荐直接从master挑标签发布:你没法保证合并完之后有没有人把其他没走完发布测试流程的代码提前合进master,稍不注意就会把没测过的代码带到线上。
正确的操作方式
- 等
release-1.1这类发布分支走完所有测试、改完所有待上线bug,确认完全符合上线标准的时候,直接在这个release分支的最终提交上打对应版本标签(比如v1.1.0),就用这个打了标签的提交做构建、部署生产。 - 上线验证没问题之后,再把这个已经打了版本标签的release分支合并回
master和日常开发分支,保证主干代码和线上版本对齐。 - 如果你们团队的规范强制要求必须在
master分支上打发布标签,那也得等release分支完整合入master、再对master上的合并结果做一轮校验确认没问题之后,在master对应的提交上重新打版本标签,绝对不能直接复用之前打在release分支上的标签。
踩坑提醒:别为了图省事硬把release分支上的标签挪到master的提交上,一旦标签对应的提交和你之前完整测过的版本对不上,要么漏了改好的bug,要么带了没测的新代码,上线必出问题。
内容的提问来源于stack exchange,提问作者Takuhii
相关产品推荐
相关产品推荐

