笔名:  haibiscuit

博客园: https://www.cnblogs.com/haibiscuit/

Git地址: https://github.com/haibiscuit?tab=repositories  (欢迎star)

本项目地址: https://github.com/haibiscuit/StudyBook

尊重笔者的劳动成果,未经允许请不要转载

三:git cherry-pick与git merge

前言:

git cherry-pick不能合并其它分支上git merge的提交版本修改,只能合并正常使用git commit提交的版本修改

作用:

相同点:

(1) git cherry-pick和git merge都是将其他分支修改的内容合并到当前分支,也就是都是执行合并修改的操作.

(2) 操作后都会提交新的版本

不同点:

(1) git cherry是其他分支的指定提交节点所修改的内容合并到当前的分支

git merge是其他分支与当前分支在上一次执行合并操作的提交或者两个分支在与master主分支提交的节点之后所有的修改进行合并

 

举例:(上面的内容可以不看,讲的有点复杂,下面通过操作来理解这连个操作)

 

(上图描述:左边是dev分支,右边是test分支,左边分支提交了一个版本c1,右边分支提交了俩个版本c2,c3)

具体操作如下:

(1) //在dev分支创建文件dev_test1.txt文件,并提交为c1节点

    git checkout dev       //切换到dev分支

touch dev_test1.txt    //dev分支上创建dev_test1.txt文件

git add .&&git commit -m "c1"   //提交修改为c1节点

 

(2) //在test分支创建文件test_test1.txt文件,并提交为c2节点

       //然后再创建test_test2.txt文件,并提交为c3节点

   //首先test分支上提交c2节点

git checkout test      //切换到test分支

touch test_test1.txt    //test分支上创建test_test1.txt文件

git add .&&git commit -m "c2"   //提交修改为c2节点

//其次test分支上提交c3节点

touch test_test2.txt    //test分支上创建test_test2.txt文件

git add .&&git commit -m "c3"   //提交修改为c3节点

(3) 在dev分支上进行git cherry-pick和git merge比较

//首先切换到dev分支

git checkout dev    //切换到dev分支

//使用git cherry-pick测试

git cherry-pick test  //将test分支最新提交节点(c3节点)的修改合并到当前分支

//使用git merge测试

git reset --hard HEAD^  //回退到dev分支的上一个节点,消除git cherry-pick test操作结果的影响

git merge test     //将test分支最新版本节点从master节点之后所有的提交修改都合并到当前节点

(4) 测试结果

//使用git cherry-pick test测试结果

dev分支上只有dev_test1.txt和test_test2.txt两个文件,也就是我们在test分支上最新一次的提交是创建test_test2.txt,并没有合并c1版本创建的test_test1.txt文件

//使用git merge test

dev分支上出现dev_test1.txt和test_test1.txt和test_test2.txt三个文件,说明自master版本之后的所有提交的修改都被合并到dev分支

 

使用场景:

git cherry-pick适合合并其它分支的一个版本节点所作的修改,之前和之后的提交都不会合并

git merge适合将两个分支自分叉之后或者是一次合并之后的所有提交版本的合并,这个还是非常常用的

正确的使用姿势:

(1) git cherry-pick操作

git cherry-pick 分支名    

//代表将分支最新版本提交所作的修改合并到但情感的分支,分支名也可以是版本号

(2) git merge操作

git merge --no-ff  -m  "提交信息"  分支名

//这里使用使用--no-ff主要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

Git实战指南----跟着haibiscuit学Git(第四篇)的更多相关文章

  1. Git实战指南----跟着haibiscuit学Git(第五篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  2. Git实战指南----跟着haibiscuit学Git(第十一篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  3. Git实战指南----跟着haibiscuit学Git(第九篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  4. Git实战指南----跟着haibiscuit学Git(第六篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  5. Git实战指南----跟着haibiscuit学Git(第一篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  6. Git实战指南----跟着haibiscuit学Git(第二篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  7. Git实战指南----跟着haibiscuit学Git(第十篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  8. Git实战指南----跟着haibiscuit学Git(第八篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  9. Git实战指南----跟着haibiscuit学Git(第七篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

随机推荐

  1. 一文了解Nuget的使用

    Nuget介绍 官网定义:NuGet是.NET的软件包管理器(免费).NuGet客户端工具提供了生成和使用软件包的能力.NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库. ...

  2. CentOS 7 安装并配置 MySQL 5.7

    Linux使用MySQL Yum存储库上安装MySQL 5.7,适用于Oracle Linux,Red Hat Enterprise Linux和CentOS系统. 1.添加MySQL Yum存储库 ...

  3. ios 在APP内提示更新

    http://www.jianshu.com/p/24daf5147bda     ios如何在应用内部提示更新  两颗星 http://www.jianshu.com/p/2ba10a58bb02  ...

  4. UIContainerView纯代码实现及原理介绍

    UIContainerView纯代码实现及原理介绍 1.1-在StoryBoard中使用UIContainerView 1.2-纯代码使用UIContainerView 1.3-UIContainer ...

  5. 【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  6. Python 如何定义只读属性?【新手必学】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Daniel2333如果还没学到属性问题,看不懂不怪你,可以先去小编的P ...

  7. 【CuteJavaScript】Angular6入门项目(3.编写服务和引入RxJS)

    本文目录 一.项目起步 二.编写路由组件 三.编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四.编写服务 1.为什么需要服务 2.编写服务 五.引入RxJS 1.关于RxJS 2.引 ...

  8. Vue中无法检测到数组的变动

    本周在写项目中遇到修改数组中的值时,视图无变化问题.在查阅Vue官方文档后了解到,由于由JavaScript 的限制,Vue 不能检测以下数组的变动: 当利用索引直接设置一个数组项时,例如:vm.it ...

  9. Java并发线程池到底设置多大?

    前言 在我们日常业务开发过程中,或多或少都会用到并发的功能.那么在用到并发功能的过程中,就肯定会碰到下面这个问题 并发线程池到底设置多大呢? 通常有点年纪的程序员或许都听说这样一个说法 (其中 N 代 ...

  10. prototype原型

    1.prototype是函数的一个属性,并且是函数的原型对象.引用它的必然是函数[对象都是通过函数创建的], 这个prototype的属性值是一个对象(属性的集合,再次强调!),默认的只有一个叫做co ...