git cherry-pick

git cherry-pick
这个命令的作用就是把指定的commit,拉到一个新的分支上。

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

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

一、基本用法

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

git cherry-pick <commitHash>

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

举例来说,代码仓库有master和feature两个分支
在这里插入图片描述
现在将提交f应用到master分支

git checkout mastergit cherry-pick f

上面的操作完成以后,代码库就变成了下面的样子
在这里插入图片描述
从上面可以看到,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命令的常用配置项如下

  • -e --edit

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

  • -n --no-commit

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

  • -x

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

  • -s --signoff

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

  • -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 会停下来,让用户决定如何继续操作

  • –continue

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

git cherry-pick --continue
  • –abort

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

  • –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>

pycharm操作

  • 如图,远程代码有三个分支,本地也有三个分支(图中远程第二个分支因本地没checkout代码故未产生,dev分支由图中New Branch新建)

请添加图片描述
现本地dev分支下修改了代码,且已经commit并push到master分支(图中因为我已经push过,故没有需要push的代码)

  • 切换到本地其它分支

在这里插入图片描述

  • 工程右键git–Show History,选中Log,选中提交到master的记录,cherry-pick之后即可将在dev分支修改且需要提交到其它远程分支的代码拉到本地的其它分支(注意如果产生冲突需要手动解决)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1247.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC处理响应附案例详解

目录 一、配置视图解析器 二、控制器方法的返回值 2.1 返回值为void 2.1.1 控制器方法 2.1.2 jsp页面 2.1.3 测试结果 2.2 返回值为String 2.2.1 控制器方法 2.2.2 测试结果 2.3 返回值为ModelAndView 2.3.1 控制器方法 2.3.2 JSP页面 2.3.3 测试结果 三、某些会…

WPS表格:使用技巧

文章目录 1、时间1&#xff09;调整时间格式① 连接符② 将“常规、短日期、长日期”格式下的时间调整为自定格式③出现“数字”的情况④ 日期格式方便筛选、统计&#xff1b;转换格式&#xff1b;计算⑤出现#的几种情况⑥ 用“数据---分列”统一变成日期格式 2&#xff09;计算…

机器学习-搭建轻量级机器人模型

在自己的机器上部署一个机器人简直太酷啦&#xff0c;因为模型数据缘故&#xff0c;可能有时候回复会有一点点怪&#xff0c;不过不影响我们探索机器模型的学习&#xff0c;搭建安装完毕&#xff0c;大家就可自行学习源码啦。 这是启动后台的图片。 需要安装环境&#xff1a;p…

Egg.js阿里JS后端框架,可以放心用。

目录 一、快速开始 二、尝试创建一个controll,修改路由&#xff0c;然后检查测试单元。 一、快速开始 npm install -g yarn yarn create egg --typesimple cd egg yarn install yarn devhttp://127.0.0.1:7001 二、尝试创建一个controll,修改路由&#xff0c;然后检查测试单…

【Java】JVM学习(三)

JVM的整体内存结构 本地方法栈 本地方法栈跟 Java 虚拟机栈的功能类似&#xff0c;Java 虚拟机栈用于管理 Java 函数的调用&#xff0c;而本地方法栈则用于管理本地方法的调用。但本地方法并不是用 Java 实现的&#xff0c;而是由 C 语言实现的(比如Object.hashcode方法)。 …

【Python开发】FastAPI 11:构建多文件应用

以往的文件都是将对外接口写在一个文件里边&#xff0c;而作为应用来说&#xff0c;接口是不可避免分散到多个文件中的&#xff0c;比如某文件负责注册登录模块&#xff0c;某文件负责内管模块&#xff0c;某文件负责业务模块等。FastAPI 也提供了APIRouter 这一工具来进行灵活…

2021年国赛高教杯数学建模B题乙醇偶合制备C4烯烃解题全过程文档及程序

2021年国赛高教杯数学建模 B题 乙醇偶合制备C4烯烃 原题再现 C4 烯烃广泛应用于化工产品及医药的生产&#xff0c;乙醇是生产制备 C4 烯烃的原料。在制备过程中&#xff0c;催化剂组合&#xff08;即&#xff1a;Co 负载量、Co/SiO2 和 HAP 装料比、乙醇浓度的组合&#xff0…

PHP OA协同办公管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP OA协同办公管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/87959360https://do…

记一次 .NET 使用 csreids 连接 Redis 超时问题

背景: 使用windows server 2016 , IIS 部署的程序运行一段时间后出现异常, Redis 部署在内网其他服务器; 通过windows 事件查看器发现一些错误日志 , CSRedis.Internal.IO.RedisSocketException: Connect to server timeout 大概意思为连接redis服务 超时; 错误 2023/6/29 11…

Java线程创建有几种方式?一种

作为一名八股专业户&#xff0c;在以前我一直觉得Java创建线程有三种方式那就是 ①继承Thread类&#xff1b; ②实现Runnable接口&#xff1b; ③实现Callable接口。 今天刷了一篇文章才知道了线程和线程体之间的区别. 例子 比如说实现Runnable接口 但是在启动线程得时候 如果…

【新星计划·2023】Centos 7安装教程(一步一图)

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、下载VMware 二、下载镜像的方式 三、安装Linux ’前言 本文将讲解下载VMware和下载镜像的方式&#xff0c;以及安装centos 7的教…

python---------xpath提取数据------打破局限

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com 目录 为什么要学习XPATH和LXML类库 什么是XPATH 认识XML XML的节点关系 常⽤节点选择⼯具 节点选择语法 节点修饰语法 选择未知节点 lxml库 _____________________________________________…