likes
comments
collection
share

git将一个分支的指定commit合并到另一个分支上

作者站长头像
站长
· 阅读数 41

前言

佛祖保佑, 永无bug。Hello 大家好!我是海的对岸!

这次碰到的情况是,我要将当前一个分支下的代码合并到另一个分支上去,去打包部署,平时涉及到的git操作基本都是拉取线上代码本地写代码再提交再拉取最新代码,( 有冲突, 就解决冲突,解决完了,) 再推送,倒是这次这个合并分支平时用的比较少,这次特此记录一下

开干

我一开始是在 【develop分支】上开发功能的,功能开发完,需要合并到 【develop5.0.2分支】上进行发布。

因为 develop分支 属于 公司内部产品开发。

而 develop5.0.2分支,则是我们基于产品 演化出来的具体一个对外的项目 。

而我开发的这个功能,正是当前这个项目需要的功能(当然也是作为产品的一个通用功能,放在了develop里面开发)。

我需要把我提交到 develop分支上的代码 合并到 develop5.0.2 分支上去。

git将一个分支的指定commit合并到另一个分支上

步骤1,查看所有分支

切换分支之前,先查看所有分支

git branch -a

以我当前项目为例

git将一个分支的指定commit合并到另一个分支上

步骤2.1,切换分支

我们要怎么做?我们需要做2件事:

  1. 先把线上的 【develop5.0.2】分支拉取下来
  2. 把develop分支上我提交的代码的 commit id 找到,后面要用

首先,把本地的 develop 分支 切换成 线上的  develop5.0.2分支

# 切换分支命令
git checkout -b develop5.0.2 origin/develop5.0.2

一个小坑

这里,可能有人会碰到一个小坑 (没错,正在在下,刚踩的坑,还热乎呢)

如果一开始你没弄明白,直接 来个  【git checkout develop5.0.2】命令  。那么,你这是自己在本地创建了一个叫 develop5.0.2的分支,你本地创建的这个分支 和 线上的那个 5.0.2是没有任何联系的

【git checkout xxx】命令,会切换到指定名称叫 xxx的分支,如果 xxx分支不存在,则会自动创建一个叫 xxx的分支。

这个时候,你需要把你本地创建的这个【develop5.0.2】给删掉,输入【git checkout -d develop5.0.2】命令,删掉自己创建的本地分支。重新去切换线上的5.0.2分支

如果不删掉你当前这个新建的分支,就直接去切换线上的分支,就会提示,要切换的分支已经存在

git将一个分支的指定commit合并到另一个分支上

不让你 把线上的给切换回来。

到这里,第一步已经完成了,接下是第二步。

步骤2.2,commit id

如果你安装了小乌龟,你查看日志的时候,可以看到 commit id。

git将一个分支的指定commit合并到另一个分支上

如果你没有安装小乌龟,那就直接在 git 终端里 输入  【git log】 也能查看

git将一个分支的指定commit合并到另一个分支上

也能 看到 每一次 提价的 commit id。

git将一个分支的指定commit合并到另一个分支上

如果 你想 退出 查看git日志,就在键盘上 输入英文状态下的  “q” 。就能退出日志

现在,我把我三次在 develop分支下 提价的  commit id  复制到 记事本里,临时存放下

然后 从 develop分支 切换到 develop5.0.2 分支,开始合并我的代码

命令:
git cherry-pick [commit-id]     表示 将另一个分支(develop)的指定commit-id合并到本地分支(develop5.0.2)

实操:
git cherry-pick 543a4ce258e9cac1095eaf0d5bb0b0a152d61149

你可以选择 一次一次的进行 提交记录 commit id 的 合并,我就是这样的

你也可以,将多个提交记录 用 空格 隔开。一次性合并所有的提交记录。

git将一个分支的指定commit合并到另一个分支上

步骤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 完完整整的合并过去?


( 补充:昨天写下这篇文章,我又思考了下,其实,就像评论说的,如果需要合并的commit 很多,与其将每一个commit 合并,确实不如 直接直接merge过去。

但是我这里的情况是,我当前提交的3个commit 后面,还有别的同事提交的他们的commit,而这个5.0.2上面只需要我提交的代码,其他同事的commit是不需要放到 5.0.2上面的。所以我就不能直接merge过去。

基于我碰到的这个场景,那我确实要 一个一个的把我自己的commit 给合并过去。当然,我这次提交的commit数量也不多,就3个,一个一个的合并,也不繁琐。如果后面碰到提交的commit数量很多,那就繁琐了。

最后我总结下来发现,其实在最开始的时候,就应该先问相关的人员,我这个代码最后写完之后,是直接在develop上 部署发布,还是在别的分支上部署发布,当然,他们事先也没和我讲,我也没有问。因为这个项目之前不是我负责的,而且我一开始开发的时候,也发现了他这个项目分支好几个。本以为我只是参与进来,开发功能,功能开发完了,代码提交到develop上面,后面的后续就和我没关系了。这次经历了这个事情,以后参与其他项目,还是要多嘴问一句。

如果多问了一句,那我可以在开发完我自己的功能,假设我开发的功能比较复杂,步骤多,commit也多,要是中途没有其他人提交的话,那我就可以直接merge 过去。而不用 再 把一个一个的commit 给依次合并。实际上我这次开发,中途也没有其他人提交。全程就我一个人。

最后的最后,多问一句,也不会吃亏,说不定可以让你可以把自己的计划调整的更好 )

参考

1. git命令-切换分支

2. git如何将另一个分支的指定commit合并到另一个分支

3. 如何退出 git log 和 git commit 状态

转载自:https://juejin.cn/post/7267418218611982376
评论
请登录