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 ...
随机推荐
- http 请求头 content-type 字段值
Content-type 定义了 http 请求的数据类型. 如果设置在请求头中,则定义的是请求体的数据类型: 如果设置在响应头中,则定义的是响应体的数据类型: 请求头--Request-Header ...
- Antlr语法优化过程记录
背景 Modelica Spec中的语法文件在Antlr下表现很糟糕,至少是1个数量级的糟糕的性能表现 理论 语义谓词减慢速度 ATN图中多分支转换为单分支 可选放在词法开头和语法的结尾 避免前导可选 ...
- 测试 SqlServer 数据库连接的简单办法
1.创建一个文件, 命名为"dba.udl". #保证后缀是.udl即可 2.双击它: 3.输入数据库地址"xxx.xxx.xxx.xxx,端口号&qu ...
- selenium爬取PDF预览文件
python selenium 爬取某网站的pdf预览文件,下载图片转换pdf 参考链接:https://blog.csdn.net/weixin_44740756/article/details/1 ...
- java 基本知识点
多线程 加载器 数据结构 内存模型 gc算法
- R6-2 二分查找
R6-2 二分查找 分数 15 全屏浏览题目 切换布局 作者 张泳 单位 浙大城市学院 已有一个10个元素的整形数组a,且按值从小到大有序.输入一个整数x,然后在数组中查找x,如果找到,输出相应的下标 ...
- SAP物料状态
物料状态控制当前物料是否可以生产.采购.设计等功能 设置路径:spro-->后勤常规-->物料主数据-->设置关键字段-->定义物料状态
- R语言3D图导出矢量图有bug
谁不喜欢高清无码?rgl.snapshot就是个渣渣 首先,用rgl画3D图并调整好视角,代码如下: z <- 2 * volcano # Exaggerate the reliefx < ...
- 85、使用Vue.js实现列表选中效果
实际项目中,我们会遇到很多类似的需求,一个列表,需要点击其中一条高亮显示.熟悉JQuery的同学说这个太简单了.可以给这个选中的element设置一个active的class.配合Css样式,让a ...
- nginx 解决 405 not allowed错误
1.http nginx.conf文件 error_page 后 增加代码 error_page 405 =200 @405; location @405 { proxy_method GET; pr ...