Git合并代码到线上分支

1.背景介绍

为何要写这样一篇

大多数开发在工作之初应该都经历过这样一段,在开发完一个需求,走完测试,预发流程需要上线的时候,会被前辈提醒,线上环境的影响面,合并代码的时候要特别小心,不要出错;上线的流程一般有一个灰度,和正式的步骤,这两个环境涉及到两个分支,往往因为多人的参与,代码提交记录具有不小的差异性;外加生产环境,正式流量,服务稳定性,故障复盘...这些名词的加持下,导致新人对这个环节更加紧张了,可能对本来自己开发时随便使用的方式都不太自信了。

这个问题最好的方式是通过进一步了解git的相关知识之后,无论面对什么样场景合并代码都没有压力。当然这样的话,需要花的时间更多,往往我们需要查这些相关问题的解决办法的时候,就是临近上线的时候,没有那么多时间去做了解;下面是总结的一套快速上手代码合并的方法。

2.将自己的代码合并入线上分支

一般情况下,线上分支有两个 灰度 和正式分支。流程规范的情况下,分支出现不一致,往往master分支是落后于灰度分支的。也有少数情况出现正式领先的情况(bug fix之类的),为了不出现因为合并了别人的代码,遇上环境不一致的场景导致线上问题,给自己本次需求带来额外的工作量,最好的办法就是:

将灰度和正式分支单独看待和合并处理,不做交叉的处理。记住一点,你上线的目的是为了让你的代码上线,不管是灰度的小流量,还是正式的全量,不同的环节,将自己的代码合并到对应的分支上就行。

2.1.将自己的代码合并入灰度分支的步骤

1、将分支切换到gray分支

git checkout 【gray_branch】

2、更新最新gray分支,保持本地gray分支代码与远端保持一致

git pull

3、接下来有两种方式合并代码

a、直接合并入gray分支,有冲突解决冲突,若冲突不好解决想放弃,也可放弃本次合并

git merge 【dev_branch】

b、若是对a类方法合并有所顾虑,担心解决冲突有问题,影响到线上分支,可以在本地基于自己的开发分支复制一个分支,将gray分支合并到这个复制分支----目的是 不要污染本地开发分支,确保自己的开发分支只有自己的代码----(当然也可以选择copy gray分支用来合并入自己的代码),再将解决完冲突的代码合并到gray分支。

git checkout 【dev_branch】

git checkout -b 【dev_branch_copy】/ git switch -c 【dev_branch_copy】

git merge 【gray_branch】

git checkout 【gray_branch】

git merge 【dev_branch_copy】

2.2将自己的代码合并入线上分支

和合并入gray分支的步骤一样,需要注意的是,如果合并入gray分支的步骤3采取的是copy本地开发分支的方式,这儿也需要基于原开发分支copy一个新的分支来操作。

3.将合并后的代码推送到远端

若需要进行code review ,使用下面的命令,触发cr单链接

git push origin 【local_branch】:refs/for/【remote_branch】

与上面命令相对的不需要进行code review的一个命令

git push origin 【local_branch】:refs/heads/【remote_branch】

该命令的简写就是最常用的 git push

git push 是省略了git push origin 【local_branch】:【remote_branch】

【remote_branch】在git配置里往往是 /refs/heads/【remote_branch】

如 /refs/heads/master。

4.若在合并代码的时候遇见不好解决的冲突,想放弃本次合并

若是使用git merge方式,放弃合并使用

git merge --abort

若是使用git rebase方式,放弃合并使用

git rebase --abort

5.一些问题解答

若没有以下问题,本小节可跳过。

5.1.关于gray分支领先master分支版本,或者master分支领先gray(少数情况bug fix之类)带来的合并代码困难

将灰度和正式环境单独看待,上灰,合并代码的目标就是将自己的代码合并到灰度分支;全量正式,就是将自己代码合并到正式分支。各个环节(灰度,全量)合并到对应的分支。

对于master领先的情况,又需要将master的代码同步到灰度,个人感觉优雅一点的做法是将master rebase到开发分支,然后再将开发分支merge到gray分支上

5.2.合并代码的场景方式列举

只做列举,不详细展开,感兴趣可去查对应的相关命令使用文档

i.合并特定的提交到当前分支

cherry-pick 【commit_id】

ii.合并特定的文件到当前分支

git checkout --patch 【source_branch】【file_name】

iii.合并特定分支

git merge 【source_branch】

git rebase 【source_branch】

5.3.git merge和git rebase的区别

git merge是无论【source_branch】做了多少commit,合并之后只会在当前分支形成一个新的commit。

merge本质是将两分支共同祖先节点之后【source_branch】的改动合并成一个提交到当前分支

git rebase是在【source_branch】和当前分支的共同祖先节点之后放入【source_branch】的所有commit,然后再将当前分支的commit放在这之后。

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值