笔名:  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. C++ 关键字之override

    非原创,转载自stackoverflow 确切的说override并非一个keyword The override keyword serves two purposes: It shows the ...

  2. .Net core_Excel 导出二维码(以导出箱单为例)

    [AccessLogAttribute(Note = "导出条形码箱单 — 条形码")]public ActionResult ExportContract(string INNE ...

  3. MySQL的存储(一、连接数据库)

    准备工作: 确保安装MySql 安装PyMySQL库 连接数据库: 这里首先尝试连接下数据库,假设当前MySQL运行在本地,用户名为root,密码为123456,运行端口为3306. 通过PyMySQ ...

  4. three.js各种材质的实现源码

    three.js常用材质:基本材质.兰伯特材质.冯氏材质.标准材质. 我们可以自己使用着色器实现这些材质,用于批量渲染等用途. 为了简单,假设物体只有一张漫反射贴图,场景中只存在一个环境光和一个平行光 ...

  5. [TimLinux] Python 再谈元类 metaclass

    本博文通过对以下链接进行理解后,编写. https://stackoverflow.com/questions/100003/what-are-metaclasses-in-python 1. 类 类 ...

  6. HDU 5121 Just A Mistake

    Just A Mistake Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) ...

  7. LightOj-1030 Discovering Gold (期望DP)

    You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of the cave c ...

  8. windows程序设计04_显示汉字的16进制

    看下面的代码 //utf-8编码 #include<stdio.h> int main() { char a[] = "中国"; printf("%x\n&q ...

  9. django上传并显示图片

    环境 python 3.5 django 1.10.6 步骤 创建名为 testupload的项目 django-admin startproject testupload 在项目testupload ...

  10. Jenkins-部署java代码项目

    实验环境: Jenkins:192.168.1.12 tomcat:192.168.1.7   一.新建远程代码Java项目仓库   说明:这边测试是在coding上注册账户,建立远程仓库,codin ...