【git、gerrit】特性分支合入主分支方法 git rebase 、git cherry-pick、git merge

文章目录

  • 1. 场景描述
    • 1.1 分支状态
  • 2. 推荐的操作方式
    • 方法 1:git merge(保留分支结构)
    • 方法 2:git rebase(线性合并提交历史)
      • 直接在master分支执行git merge br_feature,再 执行 `git pull --rebase
    • 方法 3:git cherry-pick(选择性合并提交)
  • 最佳操作建议
  • F3 和 F3' 的定义

我有一个br_master分支,后来在1.1号建了一个特性分支 br_feature,在br_feature上有3个新提交 ,分别1.2 1.4 1.6号的提交,然后在br_master有2个提交,分别是1.3 1.5,现在我要把br_feature上的3个提交 合并到 br_master上,好的操作是什么?

1. 场景描述

1.1 分支状态

【主分支 br_master:】

  • 1月1日创建,包含以下提交:

    • C1 (1.1 初始提交)
  • 在 1月3日和 1月5日,有两次新增提交:

    • C2 (1.3 提交 2)
    • C3 (1.5 提交 3)

当前状态:

C3 (1.5) -> br_master 提交 3
C2 (1.3) -> br_master 提交 2
C1 (1.1) -> 公共祖先

【特性分支 br_feature】

  • 于 1月1日从 br_master 分支创建。
  • 在 1月2日、1月4日、1月6日,有 3 次提交:
    • F1 (1.2 提交 1)
    • F2 (1.4 提交 2)
    • F3 (1.6 提交 3)

当前状态:

F3 (1.6) -> br_feature 提交 3
F2 (1.4) -> br_feature 提交 2
F1 (1.2) -> br_feature 提交 1
C1 (1.1) -> 公共祖先

2. 推荐的操作方式

方法 1:git merge(保留分支结构)

【切换到 br_master 分支】:

git checkout br_master

【合并 br_feature】:

git merge br_feature

【结果】:
提交历史中会生成一个合并提交:

*   M  -> 合并提交                 //merge提示
|\
| * F3 (1.6) -> br_feature 提交 3    //有分叉记录
| * F2 (1.4) -> br_feature 提交 2
| * F1 (1.2) -> br_feature 提交 1
* | C3 (1.5) -> br_master 提交 3
* | C2 (1.3) -> br_master 提交 2
* C1 (1.1) -> 公共祖先

【优点】:

  • 保留特性分支的独立开发历史。
  • 生成一个清晰的分支合并点,方便回溯。

【适用场景】:
团队协作中,适合需要完整历史记录的项目。

【操作安全性】:

特性分支和主分支的历史均未被修改,适合已经推送到远程仓库的分支。

方法 2:git rebase(线性合并提交历史)

【切换到 br_feature 分支】:

git checkout br_feature

【将 br_feature 的提交重新应用到 br_master 最新提交之后】:

git rebase br_master

【切换回 br_master 分支并快进合并】:

git checkout br_master
git merge br_feature

【结果】:

提交历史变为线性,按时间顺序排列:

* F3' -> br_feature 提交 3(重新生成的提交)
* F2' -> br_feature 提交 2
* F1' -> br_feature 提交 1
* C3  -> br_master 提交 3
* C2  -> br_master 提交 2
* C1  -> 公共祖先

【优点】:

  • 提交历史变得干净和线性,适合需要简单提交记录的项目。
  • 易于代码审查。

【适用场景】:

单人开发,或者特性分支尚未推送到远程仓库。

【注意事项】:

如果 br_feature 已经推送到远程仓库,执行 rebase 后可能需要强制推送(git push --force)。

直接在master分支执行git merge br_feature,再 执行 `git pull --rebase

有什么区别?

有区别,区别在于 此时merge记录是仍存在的。
相同点是都提交到了master最新提交之后
在这里插入图片描述

方法 3:git cherry-pick(选择性合并提交)

【切换到 br_master 分支】:

git checkout br_master

【逐一挑选 br_feature 的提交】:

git cherry-pick <commit_hash_F1>
git cherry-pick <commit_hash_F2>
git cherry-pick <commit_hash_F3>

【结果】:

提交历史保留了主分支的连续性,br_feature 的提交被以新的哈希值添加到 br_master 上:

* F3' (1.6) -> br_feature 提交 3
* F2' (1.4) -> br_feature 提交 2
* F1' (1.2) -> br_feature 提交 1
* C3 (1.5) -> br_master 提交 3
* C2 (1.3) -> br_master 提交 2
* C1 (1.1) -> 公共祖先

【优点】:

  • 可以选择性合并部分提交,而无需整合完整的特性分支。
  • 不会引入额外的合并提交或分支上下文。

【适用场景】:

需要调整或精简 br_feature 的提交内容时。

【注意事项】:

  • 原始分支历史(br_feature 的上下文)会丢失。
  • 如果提交较多,操作可能会比较繁琐。

最佳操作建议

【优先使用 git merge】:

  • 保留特性分支的独立性,历史记录清晰。
  • 不会修改提交哈希值,适合团队协作。

【在单人开发或对提交历史有严格要求时,使用 git rebase】:

  • 线性合并提交,更加简洁。
  • 避免生成额外的合并提交。

【在只需部分合并时,使用 git cherry-pick】:

灵活选择提交,适用于特定需求。

F3 和 F3’ 的定义

【F】3:

  • 原始提交的标识符。
  • 哈希值(commit hash)是在分支 br_feature 上创建时生成的,具体由提交的内容、父提交的哈希值、提交作者和时间等因素决定。
  • 它代表了特性分支上特定的提交。

【F3’(带撇号的 F3)】:

  • 是原始提交 F3 的一个“重新生成”版本。
  • 发生这种情况时,提交的内容可能相同,但父提交的哈希值已改变,从而导致新的提交哈希值(即 F3’)与 F3 不同。

F3’ 通常出现在以下场景:

  • git cherry-pick:将 F3 应用到另一个分支上,生成新的提交。
  • git rebase:将 F3 的提交内容重新应用到另一分支的最新提交之后,也会生成一个新的提交。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

211-基于FMC的1路1.5G ADC 1路 2.5G DAC子卡

一、板卡概述 FMC-1AD-1DA-1SYNC是我司自主研发的一款1路1G AD采集、1路2.5G DA回放的FMC、1路AD同步信号子卡。板卡采用标准FMC子卡架构&#xff0c;可方便地与其他FMC板卡实现高速互联&#xff0c;可广泛用于高频模拟信号采集等领域。 二、功能介绍 2.1 原理框图 2.2 硬件…

实操给自助触摸一体机接入大模型语音交互

本文以CSK6 大模型开发板串口触摸屏为例&#xff0c;实操讲解触摸一体机怎样快速增加大模型语音交互功能&#xff0c;使用户能够通过语音在一体机上查询信息、获取智能回答及实现更多互动功能等。 在本文方案中通过CSK6大模型语音开发板采集用户语音&#xff0c;将语音数据传输…

DocFlow票据AI自动化处理工具:出色的文档解析+抽取能力,提升企业文档数字化管理效能

目录 财务应付 金融信贷业务 近期&#xff0c;DocFlow票据自动化产品正式上线。DocFlow是一款票据AI自动化处理工具&#xff0c;支持不同版式单据智能分类扩展&#xff0c;可选功能插件配置流程&#xff0c;满足多样业务场景。 随着全球化与信息化进程&#xff0c;企业的文件…

英伟达垄断?中国芯片如何破局?

近期&#xff0c;全球AI芯片巨头英伟达被曝遭遇中国反垄断调查&#xff0c;引发行业广泛关注。 【图片来源于网络&#xff0c;侵删】 众所周知&#xff0c;在人工智能的浪潮中&#xff0c;英伟达无疑是全球AI算力市场的领头羊。在芯片领域&#xff0c;尤其是 GPU 市场&#xff…

用户体验测试与专项测试常用工具

用户体验&#xff08;User Experience, UX&#xff09;测试关注的是用户在使用软件产品时的主观感受。这包括用户界面的易用性、交互设计的友好性以及整体的满意度。UX测试不仅能够帮助开发人员发现产品中的潜在问题&#xff0c;还能为企业提供改善产品体验的建议。 功能亮点 …

40 基于单片机的温湿度检测判断系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用dht11温湿度传感器检测温湿度&#xff0c; 通过lcd1602显示屏各个参数&#xff0c;四个按键分别可以增加温湿度的阈值&#xff0c; 如果超过阈值&#xff0c;则…

基于Matlab实现三维地球模型(源码)

利用MATLAB强大的图形处理能力和数学计算功能构建的可视化应用。这个模型允许用户在三维空间中观察地球&#xff0c;并且能够动态地旋转地球模型&#xff0c;同时还可以模拟卫星在其周围的运动轨迹&#xff0c;为学习地球科学、天文学以及航天工程等领域提供了一个直观的教学工…

JavaSe部分总结

我们先来了解一下Java语言,JavaSE是Java编程语言的标准版,主要是来学习Java的基本语法,书写方式,以及一些简单的逻辑循环和判断,包括一些关键字,特殊类(抽象类),特殊的方法(static修饰的方法,final修饰的方法)等等,最重要的是Java语言是比较C语言和C语言是比较简单的,Java是面向…

适用于 Windows 的 Podman

适用于 Windows 的 Podman 虽然“容器是 Linux”&#xff0c;但 Podman 也可以在 Mac 和 Windows 上运行&#xff0c;它提供原生 CLI 并嵌入来宾 Linux 系统来启动您的容器。此 guest 称为 Podman 计算机&#xff0c;并使用命令进行管理。在 Windows 上&#xff0c;每台 Podma…

Linux中 vim 常用命令大全详细讲解

文章目录 前言一、Vim 基本操作 &#x1f579;️1.1 打开或创建1.2 退出编辑1.3 模式切换 二、Vim 光标移动命令 ↕️2.1 基本移动2.2 行内移动2.3. 单词移动2.4. 页面移动2.5. 行跳转 三、Vim 文本编辑命令 &#x1f4cb;3.1 插入和删除3.2 复制、剪切与粘贴3.3 替换与修改 四…

如何借助5G网关实现油罐车安全在线监测

油罐车是常见的特种运输车辆&#xff0c;用以运送各种汽油、柴油、原油等油品&#xff0c;运输危险系数大&#xff0c;而且由于油罐车需要经常行驶在城区道路&#xff0c;为城市各个加油站点、企业工厂运输补充所需油料&#xff0c;因此也是危化品运输车辆的重点监测和管控对象…

联想至像M3070DW打印机连接手机方法

首先&#xff0c;按打印机上的“功能”键&#xff0c;上翻页翻到第4项“网络”按“OK”键进入&#xff1b; 点进去之后&#xff0c;再按下翻页翻到第3项“安装向导”&#xff0c;按“OK”键进入&#xff1b; 然后&#xff0c;选择我们要连接的WiFi并输入WiFi密码&#xff0c; 输…

双亲委派机制是Java类加载器的一种工作模式

双亲委派机制是Java类加载器的一种工作模式&#xff0c;确保了类加载的一致性和安全性。以下是对双亲委派机制的详细解析&#xff1a; 一、定义与工作原理 双亲委派机制&#xff08;Parent Delegation Model&#xff09;要求除了顶层的启动类加载器外&#xff0c;其余的类加载…

Qt 使用modbus协议

Qt 框架下 使用modbus协议 一&#xff0c;使用Qt原生的 QModbusClient &#xff0c;比如QModbusTcpClient 1&#xff0c;因为modbus的读写 需要在同一个线程中&#xff0c;所以需要在主线程中利用moveToThread的方式&#xff0c;将业务逻辑封装到 子线程中。 2&#xff0c;m…

C语言中怎样将NULL定义为空指针?空指针的具体值其实为0哈,即地址值为0的指针为空指针。

用下面这条命令即可&#xff1a; #define NULL (void *)0下面是对这句代码的解释&#xff1a; #define NULL (void *)01. #define 的作用 #define 是一个预处理指令&#xff0c;用于定义宏。宏替换发生在编译前的预处理阶段&#xff0c;所有出现 NULL 的地方都会被替换为 (v…

Linux中的cp命令:使用、原理与源码分析

在Linux系统中&#xff0c;cp命令是最常用的命令之一&#xff0c;用于复制文件或目录。无论是日常的文件管理&#xff0c;还是系统维护&#xff0c;cp命令都扮演着重要的角色。本文将深入探讨cp命令的使用方法、工作原理&#xff0c;并从源码层面分析其实现细节。 1. cp命令的…

oracle client linux服务器安装教程

p13390677_112040_Linux-x86-64_4of7.zip 安装前&#xff0c;确认/etc/hosts文件已配置正确 cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.2…

云和恩墨 zCloud 与华为云 GaussDB 完成兼容性互认证

近日&#xff0c;云和恩墨&#xff08;北京&#xff09;信息技术有限公司&#xff08;以下简称&#xff1a;云和恩墨&#xff09;的多元数据库智能管理平台 zCloud 与华为云计算技术有限公司&#xff08;以下简称&#xff1a;华为云&#xff09;的 GaussDB 数据库完成了兼容性互…

《计算机视觉:瓶颈之辩与未来之路》

一、计算机视觉的崛起 计算机视觉是使用计算机模仿人类视觉系统的科学&#xff0c;让计算机拥有类似人类提取、处理、理解和分析图像以及图像序列的能力。它是一个多学科交叉的领域&#xff0c;与机器视觉、图像处理、人工智能、机器学习等领域密切相关。 计算机视觉行业可分为…

iOS在项目中设置 Dev、Staging 和 Prod 三个不同的环境

在 Objective-C 项目中设置 Dev、Staging 和 Prod 三个不同的环境&#xff0c;并为每个环境使用不同的 Bundle ID&#xff0c;可以通过以下步骤实现&#xff1a; 步骤 1: 创建不同的 Build Configuration 打开项目&#xff1a; 启动 Xcode 并打开你的项目。 选择项目文件&…