git cherry-pick 教程

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

这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(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

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

(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>

将代码从一个分支转移到另一个分支相关推荐

  1. git cherry-pick 多分支的代码库,将代码从一个分支转移到另一个分支

    git cherry-pick 教程 作者: 阮一峰 日期: 2020年4月27日 对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求. 这时分两种情况.一种情况是,你需要另一个分支的所有 ...

  2. 阿里云服务器数据从一个账号转移到另一个账号(跨号迁移)

    我们说到阿里云服务器一般是指服务器的IP + 服务器的数据.无论是服务器的公网IP还是服务器的弹性IP,都不能从一个账号转移到另一个账号,但是服务器的数据是可以转移的. 云服务器数据跨号转移步骤: 1 ...

  3. RabbitMQ 把一个queue从一个node转移到另外一个node.

    最近发现有个node上面的queues占用了太多的磁盘空间, 其他的两个node的磁盘的使用两还可以, 所以打算把其中的几个queue转移到另外的两个node上. 命令行的方式: rabbitmqct ...

  4. git cherry-pick 分支转移教程

    对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求. 这时分两种情况.一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge).另一种情况是,你只需要部分代码变动( ...

  5. Git开发错了分支,利用git的暂存完成代码转移到正确的分支

    问题描述:在分支one上开发了很多功能,结果发现开发错了分支,新功能应该在另外一个分支(分支two)上面开发,但此时另外一个分支上已经有其它人员开发的代码 解决方法: 第一步:先在分支one中使用&q ...

  6. Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支

    1.背景 想拷贝代码到内网开发环境,因为网速很慢,所以希望Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支.因为我直接拷贝压缩一个项目居然有1G的内容, 2.重要步骤 复制一个项目,拷贝粘贴 3. ...

  7. 将代码从一个git仓库到另一个git仓库

    业务场景: 因为内部整理代码,需要将之前的A仓库代码迁移到新的B仓库中,其中B是一个新仓库啥都没有,A有master.dev.bug-fix三个分支,需要将A中的三个分支全部迁移到B仓库中. 使用命令 ...

  8. Git分支合并到另外一个分支

    注意:不能在分支节点再新建分支节点,及时新建了成功了,分支节点也是基于master去建立的.(已验证) 下面来提一个需求: 需要新建两个分支,一个是test1另外一个是test2,首先在test1上开 ...

  9. 编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值

    编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值 目录 题目描述 代码实现 题目描述 序列重排:给一个长度为n的序列A,求找出 ...

最新文章

  1. Kafka生产者详解
  2. QQ无法安装,不用着急,用毒霸2011来解决
  3. Bigpipe---FaceBook使用的页面加载技术
  4. python接口 同花顺_利用python探索股票市场数据指南
  5. (王道考研计算机网络)第一章计算机网络体系结构-第二节体系结构与参考模型2:ISO/OSI模型
  6. android同步服务启动失败,android – FirebaseCloudMessaging:FirebaseInstanceId后台同步失败 – SERVICE_NOT_AVAILABLE...
  7. brew 、carthage 安装
  8. 源码分析 Mybatis 的 foreach 为什么会出现性能问题
  9. 题解 CF1027D 【Mouse Hunt】
  10. 数字全息干涉重建算法研究
  11. ug链轮设计软件_教你怎么用UG做链轮教程【UG爱好者首发】
  12. Python爬取最爱的电影并下载到本地(附源码)
  13. CoAP协议 libcoap API
  14. 与前端新人一起学魔法 Day02 HTML基础(二)
  15. 微信公众平台开发(1)入门教程
  16. 消息Hander dispatchfalled; nested excepton is java.ang.NOSuchMethodError: org.springramewrk.utl.tring
  17. 不为人知的网络编程(十三):深入操作系统,彻底搞懂127.0.0.1本机网络通信
  18. Python+Excel+VBA实现批量自助生成名牌
  19. 从装系统这件事来谈谈一些知名互联网公司所谓的“用户体验”,蓝瘦,香菇。。。。。
  20. 通过手机GPRS实现移动上网

热门文章

  1. 水果之王之猕猴桃-系列六(你真的了解黄心猕猴桃吗?)
  2. 盘点本届冬奥会的那些“黑科技”
  3. Palette的集成与使用
  4. Dividing(背包)
  5. element-ui switch开关打开和关闭时的文字设置样式
  6. 分离单词,瓦尔登英语单词出现频率
  7. 【Unity3D】射箭打靶游戏(简单工厂+物理引擎编程)
  8. linux操作sftp
  9. 括号匹配问题( 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合)
  10. 大锅菜机器人_炒菜机器人亮相长大食堂,可做百余种菜品