前提条件:有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. Fortran笔记之过程重载,多态,泛型编程

    参考自Introduction to Modern Fortran for the Earth System Sciences 过程重载 OOP中的另一个重要技术是过程重载(Procedure Ove ...

  2. 【Quartus系列】实验一: 3-8译码器(原理图输⼊设计)

    实验一: 3-8译码器(原理图输⼊设计) ⼀:实验⽬的 1. 了解3-8译码器的电路原理,掌握组合逻辑电路的设计⽅法 2. 掌握QuartusII软件原理图输⼊设计的流程 ⼆:实验内容 2.1设计输⼊ ...

  3. 动态修改网页的 icon 和 title

    在public的index.html中使用 link 和 title 占位(内容随意,获取到数据之后此处的内容会被覆盖) 在App.vue中调用接口获取数据,找到 link 和 title 元素,将获 ...

  4. GitBook的使用备忘

    GitBook环境搭建 npm install -g gitbook-cli # 新建目录,如helloworld cd helloworld # 执行此语句,需等待一段时间 gitbook init ...

  5. python IDLE清除窗口内容和new file里代码加行业的操作

    这个其实比较简单,主要是从网上下载好ClearWindow.py这个文件,然后把文件放到./Lib/idlelib下面,同时打开该文件夹下config-extensions.def文件,在文件尾加入下 ...

  6. 【翻译】了解Flink-对DataStream API的介绍 -- Learn Flink-Intro to the DataStream API

    目录 流式可以传输什么? Java元组和POJO 元组 POJO Scala元组和case classes 一个完整的例子 流执行环境 基本的stream sources 基本的stream sink ...

  7. socket 客户端发送命令

    import socket import sys import os,time reload(sys) sys.setdefaultencoding('utf8') def send_cmd(comm ...

  8. CentOS系统 / 目录下每个子目录的作用

    Text. 1./bin 该目录存放root和交互式登录用户使用的二进制可执行文件,如cat,cp,date,rm等. 2./boot 该目录主要存放系统启动所需要的相关文件,如何内核文件vmlinu ...

  9. DEV GridControl 主从表 (层次表)

    DataTable dtData= DbHelperOra.Query(strSql2.ToString()).Tables[0]; //主表 dtusers.TableName = "病人 ...

  10. CSS3滤镜属性filter让网页变黑白

    很多特殊的时候,我们向英雄们致敬,在互联网上最常见的方式就是整个网页变黑白,今天逛某博客收集一段代码,用于网页整体变黑白,用css3滤镜属性filter让网页马上变黑白,一行代码就搞定. 在你的css ...