git cherry-pick适用场景详解
前提条件:有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适用场景详解的更多相关文章
- Git学习系列之Windows上安装Git详细步骤(图文详解)
前言 最初,Git是用于Linux下的内核代码管理.因为其非常好用,目前,已经被成功移植到Mac和Windows操作系统下. 鉴于大部分使用者使用的是Windows操作系统,故,这里详细讲解Windo ...
- Ubuntu下Git从搭建到使用详解
Ubuntu下Git从搭建到使用详解 一.git的搭建 (1).sudo apt-get update (2).sudo apt-get -y install git 符:安装最新版本方法: add- ...
- 转:修改ETM,用Ogre实现《天龙八部》地形与部分场景详解
本文主要讲的是<天龙八部>游戏的地形和一部分场景的具体实现,使用C++, Ogre1.6,我摸索了段时间,可能方法用的并不是最好的,但好歹实现了.文章可能讲得有点罗嗦,很多简单的东西都讲了 ...
- git概念及工作流程详解
git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...
- “全栈2019”Java第一百一十三章:什么是回调?回调应用场景详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- B-index、bitmap-index、text-index使用场景详解
索引的种类:B-tree索引.Bitmap索引.TEXT index1. B-tree索引介绍: B-tree 是一种常见的数据结构,也称多路搜索树,并不是二叉树.B-tree 结构可以显著减少定位 ...
- RxJava在Android中使用场景详解
RxJava 系列文章 <一,RxJava create操作符的用法和源码分析> <二,RxJava map操作符用法详解> <三,RxJava flatMap操作符用法 ...
- 【Git版本控制】git中reset命令的详解
git reset 命令详解(一) git reset 命令详解(二) reset命令的语法:git reset [选项] [版本号] [要回退的目标] 选项:--soft仅将head指针指向历史 ...
- Git合并分支命令参数详解:git merge --ff
今天研究了一下git merge命令常用参数,并分别用简单的例子实验了一下,整理如下: 输入命令git merge -h可以查看相关参数: --ff 快速合并,这个是默认的参数.如果合并过程出现冲突 ...
- git分支管理--rebase&merge详解
目录 分支合并 git merge --squash [分支名] 注意点 git rebase [分支名] git rebase git rebase --abort git rebase -i gi ...
随机推荐
- Fortran笔记之过程重载,多态,泛型编程
参考自Introduction to Modern Fortran for the Earth System Sciences 过程重载 OOP中的另一个重要技术是过程重载(Procedure Ove ...
- 【Quartus系列】实验一: 3-8译码器(原理图输⼊设计)
实验一: 3-8译码器(原理图输⼊设计) ⼀:实验⽬的 1. 了解3-8译码器的电路原理,掌握组合逻辑电路的设计⽅法 2. 掌握QuartusII软件原理图输⼊设计的流程 ⼆:实验内容 2.1设计输⼊ ...
- 动态修改网页的 icon 和 title
在public的index.html中使用 link 和 title 占位(内容随意,获取到数据之后此处的内容会被覆盖) 在App.vue中调用接口获取数据,找到 link 和 title 元素,将获 ...
- GitBook的使用备忘
GitBook环境搭建 npm install -g gitbook-cli # 新建目录,如helloworld cd helloworld # 执行此语句,需等待一段时间 gitbook init ...
- python IDLE清除窗口内容和new file里代码加行业的操作
这个其实比较简单,主要是从网上下载好ClearWindow.py这个文件,然后把文件放到./Lib/idlelib下面,同时打开该文件夹下config-extensions.def文件,在文件尾加入下 ...
- 【翻译】了解Flink-对DataStream API的介绍 -- Learn Flink-Intro to the DataStream API
目录 流式可以传输什么? Java元组和POJO 元组 POJO Scala元组和case classes 一个完整的例子 流执行环境 基本的stream sources 基本的stream sink ...
- socket 客户端发送命令
import socket import sys import os,time reload(sys) sys.setdefaultencoding('utf8') def send_cmd(comm ...
- CentOS系统 / 目录下每个子目录的作用
Text. 1./bin 该目录存放root和交互式登录用户使用的二进制可执行文件,如cat,cp,date,rm等. 2./boot 该目录主要存放系统启动所需要的相关文件,如何内核文件vmlinu ...
- DEV GridControl 主从表 (层次表)
DataTable dtData= DbHelperOra.Query(strSql2.ToString()).Tables[0]; //主表 dtusers.TableName = "病人 ...
- CSS3滤镜属性filter让网页变黑白
很多特殊的时候,我们向英雄们致敬,在互联网上最常见的方式就是整个网页变黑白,今天逛某博客收集一段代码,用于网页整体变黑白,用css3滤镜属性filter让网页马上变黑白,一行代码就搞定. 在你的css ...