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

前言

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

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

开干

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

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

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

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

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

步骤1,查看所有分支

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

sh 复制代码
git branch -a

以我当前项目为例

步骤2.1,切换分支

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

  1. 先把线上的 【develop5.0.2】分支拉取下来
  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 完完整整的合并过去?

参考

1. git命令-切换分支

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

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

相关推荐
゛凌乱的记忆づ4 小时前
好用的md文件编辑器——TyporaS与Typora
笔记·git·typora·markdown
এ慕ོ冬℘゜7 小时前
Git 基础规范:小步提交、提交信息规范与常用命令
git·svn
忘了ʷºᵇₐ9 小时前
Git学习笔记
笔记·git·学习
BIBI20491 天前
换 Git 托管平台怎么做?基于 TortoiseGit 的跨平台迁移教程
windows·git·tortoisegit·问题解决·版本控制·最佳实践
echome8881 天前
Git 日常救急:撤销提交、找回误删文件和解决冲突
git·版本控制
赵民勇1 天前
Git命令详解
git
不老刘2 天前
Antigravity 的 New Worktree 模式:给 AI 代理一个安全的“平行工位”
人工智能·git·ai编程·antigravity
光谱SpectrAI2 天前
Windows 也中招:Git Bash 和 Node 仍信任泄露的 eMudhra 证书
git
YIN_尹2 天前
【git原理与使用】git初识与安装
大数据·git·elasticsearch
Leo_Mr2 天前
Vue3 项目配置 Git 提交规范(企业通用方案:husky + commitlint + cz-git + lint-staged)
git