前言
佛祖保佑, 永无bug
。Hello 大家好!我是海的对岸!
这次碰到的情况是,我要将当前一个分支下的代码合并到另一个分支上去,去打包部署,平时涉及到的git操作基本都是拉取线上代码
,本地写代码
,再提交
,再拉取最新代码
,( 有冲突, 就解决冲突,解决完了,) 再推送
,倒是这次这个合并分支
平时用的比较少,这次特此记录一下
开干
我一开始是在 【develop分支】
上开发功能的,功能开发完,需要合并到 【develop5.0.2分支】
上进行发布。
因为 develop分支 属于 公司内部产品开发。
而 develop5.0.2分支,则是我们基于产品 演化出来的具体一个对外的项目 。
而我开发的这个功能,正是当前这个项目需要的功能(当然也是作为产品的一个通用功能,放在了develop里面开发)。
我需要把我提交到 develop分支上的代码 合并到 develop5.0.2 分支上去。
步骤1,查看所有分支
切换分支之前,先查看所有分支
sh
git branch -a
以我当前项目为例
步骤2.1,切换分支
我们要怎么做?我们需要做2件事:
- 先把线上的
【develop5.0.2】
分支拉取下来 - 把develop分支上我提交的代码的 commit id 找到,后面要用
首先,把本地的 develop 分支 切换成 线上的 develop5.0.2分支
sh
# 切换分支命令
git checkout -b develop5.0.2 origin/develop5.0.2
一个小坑
这里,可能有人会碰到一个小坑 (没错,正在在下,刚踩的坑,还热乎呢)
如果一开始你没弄明白,直接 来个 【git checkout develop5.0.2】
命令 。那么,你这是自己在本地
创建了一个叫 develop5.0.2的分支,你本地创建的这个分支
和 线上的那个 5.0.2是没有任何联系的
。
sh
【git checkout xxx】命令,会切换到指定名称叫 xxx的分支,如果 xxx分支不存在,则会自动创建一个叫 xxx的分支。
这个时候,你需要把你本地创建的这个【develop5.0.2】给删掉,输入【git checkout -d develop5.0.2】命令,删掉自己创建的本地分支。重新去切换线上的5.0.2分支
如果不删掉你当前这个新建的分支,就直接去切换线上的分支,就会提示,要切换的分支已经存在
不让你 把线上的给切换回来。
到这里,第一步已经完成了,接下是第二步。
步骤2.2,commit id
如果你安装了小乌龟,你查看日志的时候,可以看到 commit id。
如果你没有安装小乌龟,那就直接在 git 终端里 输入 【git log】 也能查看
也能 看到 每一次 提价的 commit id。
如果 你想 退出 查看git日志,就在键盘上 输入英文状态下的 "q" 。就能退出日志
现在,我把我三次在 develop分支下 提价的 commit id 复制到 记事本里,临时存放下
然后 从 develop分支 切换到 develop5.0.2 分支,开始合并我的代码
sh
命令:
git cherry-pick [commit-id] 表示 将另一个分支(develop)的指定commit-id合并到本地分支(develop5.0.2)
实操:
git cherry-pick 543a4ce258e9cac1095eaf0d5bb0b0a152d61149
你可以选择 一次一次的进行 提交记录 commit id 的 合并,我就是这样的
你也可以,将多个提交记录 用 空格
隔开。一次性合并所有的提交记录。
步骤4,推送
确认本地 【develop5.0.2】
已经获取到另一个分支【develop】
的指定提交后,然后就可以直接通过git push提交代码了(当然,老规矩,推送之前,先进行拉取操作。 先git pull拉取最新的代码呦!否则可能就会出现meger冲突)
有人会有疑问,我把一个分支上的代码 合并到另一个分支上,会不会对另一个分支上后面的提交造成影响。覆盖掉后面的代码 ?
答案是不会,Git的合并操作是将两个分支的修改内容合并到一起,保留各自的提交历史。
还有一个疑问?
我在develop分支上提交过3次,我之前想的是,我就把最后一次提交的commit 给 合并到 develop5.0.2,行不行?
但是 转念一想,我最后一次提交是基于第二次提交的代码上调整的,第二次提交又是基于第一次的基础上调整的。第一次提交就是我的代码最开始, 从无到有。想来想去,还是把三次提交的 commit id 给 完完整整的 合并到 5.0.2的分支上去了。
jym,你们觉得呢,是直接把最后一次的commit id 合并过去,还是把所有的commit id 完完整整的合并过去?