前篇

在此之前,我想问一个问题,你是在接触 Git 多久之后,知道有这个命令的?

我的答案是很久很久之后,这真是一个悲伤的故事。懒,是万恶之源,此话果然不假。

cherry-pick 能干啥?

cherry,中文翻译是樱桃,pick, 中文翻译是采集,挑选。所以,cherry-pick 就是挑选樱桃,git cherry-pick 就是从你的项目文件中找出"樱桃"二字,找到就可以找博主来兑换樱桃了。

以上是开玩笑,写博客呢,干什么,正经点!

cherry-pick 的翻译是择优挑选,使用git cherry-pick命令,可以选择将现有的一个或者多个提交的修改引入当前内容。

那么,什么情况下会有到这么不常见的命令呢?

假设你现在正在开发一个项目,有一个功能分支 feature,开发分支 develop。 feature 有3个提交,分别是 A ,B ,C 。develop 分支只想加入 C 功能, 此时合并操作无法满足,因为直接合并 feature,会将3个提交都合并上,我想合并就只有 C,不要 A,B。此时就需要挑樱桃大法–cherry pick!

具体的做法:

  1. 切换到 develop 分支。
  2. 通过 git log feature,找到 C 的 SHA1 值。
  3. 通过 git cherry-pick <C的SHA1> ,将 C 的修改内容合并到当前内容分支 develop 中。
  4. 若无冲突,过程就已经完成了。如果有冲突,按正常冲突解决流程即可。

cherry-pick VS merge, Ready? GO!

从上面简单的小例子上看,我想,小伙伴们,都应该已经对 merge 和 cherry-pick 有了大概的区分,这里做下对比,让大家有个清晰明确的掌握,防止似是而非,以后误操作。


git merge :将两个提交历史合并。
git cherry-pick:将提交对应的内容合并。

这里,非常需要明确的一点,commit 代表的是修改!

例中,提交 C 的内容,就是对比 B 上面做的修改,可能是创建了一个文件,或者修改了一个词语。那么 C 内容就是一个文件的添加,和一个词语的修改。

以提交 C 为结束点的提交历史,实际内容是提交 C 和 C 之前所有的修改。

cherry-pick 操作的对象就是 commit。
merge 操作的对象就是 commit history。

所以,使用的时候,你要知道,你想要的什么。

博主邀请你参加挑樱桃游戏

光说不练假把式,现在写个小 demo 测试一下。

  1. 创建一个空文件夹 GitDemo,git init初始化。
  2. 随便创建一个文件,完成初次提交,创建 master 分支。
  3. 创建并切换 develop 分支,创建个提交,每一个提交中创建一个文件,方便测试。

具体命令如下:

// 切换到GitDemo目录下,并初始化Git
cd .../GitDemo
git init  //创建初次提交,创建 master 分支
touch cherry-pick.txt
git add .
git commit -m '创建cherry-pick文件,初次提交'  //创建并切换到 develop 分支,创建提交“樱桃1号”
git checkout -b develop
touch 樱桃1号.txt
git add .
git commit -m "创建樱桃1号文件"//创建提交“樱桃2号”
touch 樱桃2号.txt
git add .
git commit -m "创建樱桃2号文件"//创建提交“樱桃3号”
touch 樱桃3号.txt
git add .
git commit -m "创建樱桃3号文件"

以上,测试场景构建完毕。现在用 git log develop 查看 develop 的提交历史如下:

现在,仔细瞅瞅,你最喜欢几号樱桃,喜欢哪个,就挑哪个。我喜欢3号,从上图看到3号的 SHA1 值是90279a36a8972034e922b65598adfc0c3e13679b,使用前几位就足够了。

//切换到 master 分支
git checkout master
//挑选3号樱桃
git cherry-pick 90279a36

挑选成功,通过 ls 命令,看到成功加入樱桃3号.txt

挑樱桃游戏成功!

另外,需要说明的是,cherry-pick 到 master 的樱桃3号,事实上不是真的 3 号,是 3 号的复制品, 两者的 SHA1 值是不同的,由此可确认这是两个提交。

了解更多的 cherry-pick

理解 cherry-pick 操作的本质,之后,再看其他的命令,就毫无压力了。全部命令详看官方文档,这里我给出几个比较常用的:

git cherry-pick <commits>

挑选多个提交合并,提交之间用空格相隔。例如,想挑选1号和3号的,就可以用git cherry-pick 4d2951 e4cdff9命令一步到位了。

git cherry-pick <start-commit>..<end-commit>

挑选一个范围的多个提交合并,但是这个语法对应操作区别是左开右闭,不包含start-commit。另外要注意两个commit 之间要求有连续关系的,并且前者要在后者之前,顺序不能颠倒。

git cherry-pick <start-commit>^..<end-commit>

这个和上面一样,区别就是加了一个^符号,就变成闭区间了,包含 start-commit。

git cherry-pick <branch name>

挑选 branch 最顶端的提交。例如挑选 3 号樱桃可以用git cherry-pick develop

git cherry-pick --continue  //继续下个操作
git cherry-pick --quit //退出
git cherry-pick --abort //停止本次操作

以上是关于 cherry-pick 操作控制命令,当 cherry-pick 多个提交时,假设遇到冲突,--continue继续进行下个,--quit结束 cherry-pick 操作,但是不会影响冲突之前多个提交中已经成功的,--abort直接打回原形,回到 cherry-pick 前的状态,包括多个提交中已经成功的。

尾篇

对于这个命令来说,理解 commit 的本质是修改很关键。好了,下篇博客见~,这个3月要将当初计划的 Git 系列博客补完,Fighting!

欢迎订阅我的Git系列文章

  • 01. 请回答:Git是什么?
  • 02. Git常用命令一日游活动
  • 03. Git三大特色之Branch(分支)
  • 04. Git三大特色之Stage(暂存区)
  • 05. Git三大特色之WorkFlow(工作流)
  • 06. Git-你好, HEAD 同学
  • 07. Git-用 cherry-pick 挑好看的小樱桃
  • 08. Git-rebase 黑魔法之打造完美的线性历史
  • 09. Git-rebase 黑魔法之打磨 commit 颗粒度
  • 10. Git-少年,你想学回滚吗?想撤销文件修改吗?
  • 11. Git-移动记录仪 & 贴心小棉袄 reflog
  • 12. Git-丢失的 commit 是真的消失了吗?
  • 13. Git-叹为观止的 log 命令 & 其参数
  • 14. Git-送娃子们一本关于如何自学 Git 的秘籍

欢迎关注个人微信公众号「浅浅同学的开发笔记」,最新的博客,好玩的事情,都会在上面分享,期待与你共同成长。

Git-用 cherry-pick 挑好看的小樱桃相关推荐

  1. IDEA git cherry pick 简单使用

    cherry pick的作用: 参考了一些博客, eg: 参考博客1 参考博客2 再做了个小案例后,我目前的理解是,cherry pick的作用是将一个分支的部分提交/历史提交,可以合并到另外一个分支 ...

  2. git cherry pick

    直接将选定的其他分支的commit,提交到该分支上 不建议使用 git rebase --onto 使用cherry pick代替 http://weblog.avp-ptr.de/20120928/ ...

  3. idea cherry pick 功能 git log 窗口 冲突conflict

    git log 窗口 参考 source tree cherry pick, merge conflict merge conflict 冲突 <<<<<<< ...

  4. [gitsourcetree]cherry pick和遴选的使用

    前言 cherry pick. 拷贝其中的某一次提交记录. 本文就介绍一种更加快捷的方式 cherry pick. 介绍 此方法主要用于2分支分别独立维护的情况, 即某一分支已经上线了spring-2 ...

  5. 5去掉button按钮的点击样式_各种好看的小按钮合集,纯css编写,最近在学习时遇到的,记录成为笔记...

    写在前面 最近忙着实习的事,前往广州,租房,置办东西等等.用碎片化的时间看了一些博客,也看到不少我认为很不错的通过纯css来打造的按钮样式.记录下来以后开发的时候或许能用上. 亮起来按钮 <di ...

  6. button按钮样式_各种好看的小按钮合集,纯css编写,最近在学习时遇到的,记录成为笔记...

    写在前面 最近忙着实习的事,前往广州,租房,置办东西等等.用碎片化的时间看了一些博客,也看到不少我认为很不错的通过纯css来打造的按钮样式.记录下来以后开发的时候或许能用上. 亮起来按钮 < 简 ...

  7. 在gerrit上cherry pick多笔提交到一个仓库中

    我们的要求是在dvr_service仓库上从其他分支cherry pick 两笔提交到release/b03chn_rel_sop_3_nobo分支 这两笔提交分别如图所示 如图所示,B02-5746 ...

  8. 1.Cherry Pick与Create Patch的区别

    Cherry Pick与Create Patch的区别 结论 实验 场景1:应用时无冲突 场景2: 应用时产生冲突 使用cherry pick 使用patch 场景3:产生冲突,并且有其他文件的变更 ...

  9. 通过爬取微博评论,发现好看的小姐姐...

    通过爬取微博评论,发现好看的小姐姐... 前言 页面分析 技术栈 架构 关键点 成果 前言 刷微博刷到一个博主求好看小姐姐照片的微博,内心不由得轻蔑一笑,好看的小姐姐凭啥理你,滑到评论区,我瞬间就酸了 ...

最新文章

  1. [导入]源代码版本控制(一)
  2. WinForm之创建word并操作文档
  3. SAP Hybris - how to find corresponding cronjob for a given import
  4. 为什么SAP UI5框架在应用整个生命周期只调用onBeforeRendering一次
  5. linux查找应用主机,Linux 主机和服务器基本性能检查命令和工具
  6. 国编是什么,需要什么条件,是什么流程?
  7. JavaScript十六进制、八进制、二进制与十进制互转
  8. react-native学习小结
  9. 路由器的四个主要内存区域
  10. WGAN-GP方法介绍
  11. gif怎么分解成图片呢?
  12. iOS之healthKit
  13. 计算机的内存时序参数,装机用户须知:电脑内存时序基础知识
  14. JQuery slidebox实现图片轮播
  15. IDV和VDI,桌面虚拟化对比
  16. sprite(雪碧图,也叫精灵图)
  17. HTML5新特性_笔记
  18. 人工智能数学基础:利用导数判断函数单调性、凹凸性、极值、最值和描绘函数图形
  19. 国防科大 linux教程,操作系统国防科大罗宇
  20. iOS 开发者证书、描述文件等详解

热门文章

  1. 一个后端朋友面试一个月的经验总结
  2. 1.2经济金融基础之金融基础知识
  3. GNU Radio: 射频子板
  4. OTHER:环比与同比
  5. java 地图四色着色算法_趣味地图系列之6 四色定理之我见
  6. OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
  7. 北京卓镭激光完成近亿元B轮融资,君联资本领投
  8. Excel表格列多选
  9. 【spring aop】连接点(Jointpoint)、切入点(Pointcut)、增强(Advice)、方面/切面(Aspect、Advisor)
  10. uni-app - 幸运抽奖圆形大转盘插件组件(支持后端接口确定最终奖品,可自定义轮盘宽高、颜色、字号、按钮等等,全端兼容代码干净整洁无 BUG,官方最好用的营销页面抽奖转盘源码)老虎机九宫格式抽奖机