前提条件:有2个分支,分别是master,hotfix,其中master是用于生产环境的发布分支。

场景1:生产环境hotfix。

T1时刻,使用master分支发布生产。当时的HEAD的commit记为C1.

T2时刻,开发完成下一个迭代周期的代码,并且merge到master准备提测,此时master的HEAD记为C2,注意:C1和C2已经不同了。

T3时刻,生产环境发现了bug,开发基于C1创建一个hotfix分支,代码紧急修复并签入hotfix,用C3表示这个commit,发布生产。

问题:由于hotfix不能基于C2创建(T2时master已污染,存在下一周期待提测代码),如何确保C3被正确merge到master呢?

答案:使用git cherry-pick命令。

git checkout dev // 每个开发人员有自己的dev分支,这个分支基于master创建,时刻和master同步

git cherry-pick -n C3   //C3是hotfix的提交sha-1

git commit -am "把hotfix(C3)的代码cherry-pick到master"

git push origin dev

最后,去gitlab里发起一个MergeRequest吧,dev->master。

场景2:某一个产品有3个分支,master,feture1,feture2。其中,

master是基础功能,覆盖全体用户;

feature1包括中级功能,覆盖一部分用户;

feature2包括高级功能,覆盖另一部分用户;

由于业务领域的特征,这3个分支一直并行存在,feature1和feature2永远不会回归主线master。

T1时刻,feature1新增了5个功能(commit),分别记录为F1、F2、F3、F4,F5; 假定这5个commit是顺序提交的。

T2时刻,决定把F1、F2、F3的这3个功能开放给所有用户。

问题:如何在feature1分支中挑选需要的功能,并最终合并到master呢?

答案:使用git cherry-pick命令。

git checkout dev // 每个开发人员有自己的dev分支,这个分支基于master创建,时刻和master同步

方法1:git cherry-pick -n F1~1..F3  // 注意:commit区间(左开右闭],因此第1个参数要设置成F1~1(F1的上一次提交),这样才能把F1也包含进去。

方法2:依次执行3条命令,

git cherry-pick -n F1

git cherry-pick -n F2

git cherry-pick -n F3

git commit -am "F1、F2、F3的代码cherry-pick到master"

git push origin dev

最后,去gitlab里发起一个MergeRequest吧,dev->master。

注意:

若cherry-pick期间发生冲突,先解决冲突,再commit。

若cherry-pick命令执行后提示:

error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: cherry-pick failed

则执行对应操作:

git cherry-pick --continue   // 继续cherry-pick
git cherry-pick --quit  // 退出
git cherry-pick --abort // 中止

git cherry-pick适用场景详解的更多相关文章

  1. Git学习系列之Windows上安装Git详细步骤(图文详解)

    前言 最初,Git是用于Linux下的内核代码管理.因为其非常好用,目前,已经被成功移植到Mac和Windows操作系统下. 鉴于大部分使用者使用的是Windows操作系统,故,这里详细讲解Windo ...

  2. Ubuntu下Git从搭建到使用详解

    Ubuntu下Git从搭建到使用详解 一.git的搭建 (1).sudo apt-get update (2).sudo apt-get -y install git 符:安装最新版本方法: add- ...

  3. 转:修改ETM,用Ogre实现《天龙八部》地形与部分场景详解

    本文主要讲的是<天龙八部>游戏的地形和一部分场景的具体实现,使用C++, Ogre1.6,我摸索了段时间,可能方法用的并不是最好的,但好歹实现了.文章可能讲得有点罗嗦,很多简单的东西都讲了 ...

  4. git概念及工作流程详解

    git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...

  5. “全栈2019”Java第一百一十三章:什么是回调?回调应用场景详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. B-index、bitmap-index、text-index使用场景详解

    索引的种类:B-tree索引.Bitmap索引.TEXT index1.  B-tree索引介绍: B-tree 是一种常见的数据结构,也称多路搜索树,并不是二叉树.B-tree 结构可以显著减少定位 ...

  7. RxJava在Android中使用场景详解

    RxJava 系列文章 <一,RxJava create操作符的用法和源码分析> <二,RxJava map操作符用法详解> <三,RxJava flatMap操作符用法 ...

  8. 【Git版本控制】git中reset命令的详解

    git reset 命令详解(一) git reset 命令详解(二) reset命令的语法:git reset [选项]  [版本号]  [要回退的目标] 选项:--soft仅将head指针指向历史 ...

  9. Git合并分支命令参数详解:git merge --ff

    今天研究了一下git merge命令常用参数,并分别用简单的例子实验了一下,整理如下: 输入命令git merge -h可以查看相关参数: --ff  快速合并,这个是默认的参数.如果合并过程出现冲突 ...

  10. git分支管理--rebase&merge详解

    目录 分支合并 git merge --squash [分支名] 注意点 git rebase [分支名] git rebase git rebase --abort git rebase -i gi ...

随机推荐

  1. Unity Profiler真机调试

    1.在BuildSetting面板中勾选DevelopmentBuild 2. .cmd命令: adb forward tcp:34999 localabstract:com.CompanyName. ...

  2. Google big query - 怎么创建临时表/create temp table

    Creating a temporary table The following example creates a temporary table named Example and inserts ...

  3. mybatis-关联查询3-自关联查询

    一对多的方式处理 查询指定栏目的所有子孙栏目 查询指定栏目及其所有子孙栏目 多对 一的方式处理

  4. db2存储过程很慢如何查看

    存储过程很慢 ,如何处理? #查看包的情况select r.routineschema, r.routinename, r.routinemodulename, rd.bname as package ...

  5. Java-面向对象基础 构造方法

    public class Dog {// 定义属性 String nick; String color; int age; // 定义构造方法 public Dog(String nick,Strin ...

  6. 使用 DataType 特性应用于 Date 和 Price 属性

    [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { g ...

  7. Word08 创新产品展示说明会邀请函office真题

    1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...

  8. MySQL 常用命令(3)------表基本操作

    五.表的基本操作 1.创建表 语法:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]); ...

  9. 如何判断JS数据类型

    在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined.N ...

  10. Jmeter 5.0 遇见connection reset问题

    问题:大并发时遇见java.net.SocketException: Connection reset 测试过程中经常遇见connection reset ,原因是大数据量发送时,服务器不能接纳那么多 ...