提示:本文经奇妙之二进制二次编辑和审核, 修正了一些错误,包括但不限于错别字,语句不通顺,代码编译不过,命令书写错误,图片缺失,排版优化等。

文章目录

  • 一、基本用法
  • 二、转移多个提交
  • 三、配置项
  • 四、代码冲突
  • 五、转移到另一个代码库

对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。

这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 cherry-pick。

一、基本用法

git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。

$ git cherry-pick <commitHash>

上面命令就会将指定的提交commitHash,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。

举例来说,代码仓库有masterfeature两个分支。

     a - b - c - d   Master\e - f - g Feature

现在将提交f应用到master分支。

# 切换到 master 分支
$ git checkout master# Cherry pick 操作
$ git cherry-pick f

上面的操作完成以后,代码库就变成了下面的样子。

    a - b - c - d - f'   Master\e - f - g Feature

从上面可以看到,master分支的末尾增加了一个提交f'

git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。

$ git cherry-pick feature

上面代码表示将feature分支的最近一次提交,转移到当前分支。

二、转移多个提交

Cherry pick 支持一次转移多个提交。

$ git cherry-pick <HashA> <HashB>

上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。

如果想要转移一系列的连续提交,可以使用下面的简便语法。

$ git cherry-pick A..B

上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。

注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。

$ git cherry-pick A^..B

三、配置项

git cherry-pick命令的常用配置项如下。

(1)-e--edit

打开外部编辑器,编辑提交信息。

(2)-n--no-commit

只更新工作区和暂存区,不产生新的提交。

这个选项非常有用,因为cherry-pick pick了多少个commit,就会相应地生成多少个commit,如果我们想保持一个commit,就可以使用该选项。
(3)-x

在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。

(4)-s--signoff

在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。

(5)-m parent-number--mainline parent-number

如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动。

-m配置项告诉 Git,应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数,代表原始提交的父分支编号。

$ git cherry-pick -m 1 <commitHash>

上面命令表示,Cherry pick 采用提交commitHash来自编号1的父分支的变动。

一般来说,1号父分支是接受变动的分支(the branch being merged into),2号父分支是作为变动来源的分支(the branch being merged from)。

四、代码冲突

如果操作过程中发生代码冲突,Cherry pick 会停下来,让用户决定如何继续操作。

(1)--continue

用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。

 $ git cherry-pick --continue

(2)--abort

发生代码冲突后,放弃合并,回到操作前的样子。

(3)--quit

发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。

五、转移到另一个代码库

Cherry pick 也支持转移另一个代码库的提交,方法是先将该库加为远程仓库。

 $ git remote add target git://gitUrl

上面命令添加了一个远程仓库target

然后,将远程代码抓取到本地。

 $ git fetch target

上面命令将远程代码仓库抓取到本地。

接着,检查一下要从远程仓库转移的提交,获取它的哈希值。

$ git log target/master

最后,使用git cherry-pick命令转移提交。

$ git cherry-pick <commitHash>

git基础教程(28) 猴子偷桃,git cherry-pick采樱桃相关推荐

  1. git基础教程(3) Windows10下安装Git

    提示:本文经奇妙之二进制二次编辑和审核, 修正了一些错误,包括但不限于错别字,语句不通顺,代码编译不过,命令书写错误,图片缺失,排版优化等. Git是一个开源的分布式版本控制系统,可以有效.高速的处理 ...

  2. git基础教程(2) 吹吹牛闲聊Git 简史

    提示:本文经奇妙之二进制二次编辑和审核, 修正了一些错误,包括但不限于错别字,语句不通顺,代码编译不过,命令书写错误,图片缺失,排版优化等. 同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举 ...

  3. Git基础教程(二)

    继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 1 配置命令:git config --global * 2 版本库初始化:git init 3 向版本库添加文件:git ad ...

  4. Git系列(一)、Git基础教程【建议收藏】

    Git基础教程 一.Git简介 1.1.什么是Git? 1.2.Git的特点 1.3.集中式与分布式的区别? 1.4.什么是版本控制系统? 1.5.Git下载安装 1.5.Git配置 1.6.Git ...

  5. python猴子偷桃_Python实例100个(基于最新Python3.7版本)

    Python3 100例 原题地址: http://www.runoob.com/python/python-100-examples.html git地址: https://github.com/R ...

  6. 猴子偷桃c语言编程软件,c语言经典算法——猴子偷桃问题

    题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 ...

  7. java写猴子偷桃问题_猴子偷桃是什么意思

    满意答案 xucw111 2013.04.02 采纳率:42%    等级:11 已帮助:8003人 从字面意思理解就是猴子偷桃子涩!从引申意来讲这个问题就有点严肃了. 从前,有一个美丽的小村庄,名字 ...

  8. 面试编程题-猴子偷桃

    近期面试两次碰到这道题,很有意思,哈哈,所以现在写下来纪念一下. 题目 一个猴子来到山里的一棵桃树下,发现有一堆桃子.第一天它吃掉一个,然后拿走一半,回到家里,把消息告诉第二个猴子.第二天第二个猴子也 ...

  9. 实例021:猴子偷桃 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上

    实例021:猴子偷桃 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第1 ...

最新文章

  1. 210328卡式水分开阶段总结
  2. Kubectl get pods 一直处于 Status:containerCreating
  3. Windows 环境下安装redis 及其PHP Redis扩展
  4. syslog-ng 正确配置udp接受端口
  5. mysql悲观锁 更新_MySQL学习笔记(四)悲观锁 for update
  6. 计算机二级vfp模拟考试题,计算机等级考试二级VFP模拟练习题[10]
  7. 类模板非类型形参实现Stack
  8. 【操作系统】操作系统的生成
  9. Java 编解码问题
  10. java常用算法_五分钟记住Java常用的八种排序算法与代码实现
  11. 【毕业设计】php+mysql社区交流系统(毕业论文+封面目录+系统+说明书)
  12. python 启动参数_python启动参数
  13. PyTorch并行与分布式(三)DataParallel原理、源码解析、举例实战
  14. java 调用 c# webservice 压缩 Liststring示例
  15. 用Java代码敲出简易的王者荣耀单机版,让你秒懂王者荣耀的运行机制
  16. 统计学常用的数据分析方法总结
  17. vue json对象转数组_vue面试题汇总
  18. 装配图中齿轮的画法_装配图的视图和画法
  19. 暑期旅游超十亿人次,张家界成为大黑马,挤掉三亚西安排全国第三
  20. HTTP Security Header Not Detected

热门文章

  1. 基于Sikuli GUI图像识别框架的PC客户端自动化测试实践
  2. Windows通过服务名强行停止某个服务命令
  3. ht城市介绍人口数量Html,城市人口英文作文
  4. MySQL如何快速恢复单表(物理方式)
  5. CNN神经网络的个人总结
  6. ZoomEye Pro-情报驱动的网络空间资产安全管理系统
  7. c语言mktime返回值为-1,C语言mktime()
  8. 不管是什么病,连常见的感冒都是痛苦的,不能要强迫别人体验
  9. 我靠加班把老员工弄走了,昨天老板又给我画饼,一天天浑浑噩噩,Android开发究竟还有前途吗?
  10. zbb20181214 js,html 点击页面出现游走文字 富强 民主 民主