当前位置: 首页 > news >正文

精通git,没用过git cherry-pick?

前言

git cherry-pick是git中非常有用的一个命令,cherry是樱桃的意思,cherry-pick就是挑樱桃,从一堆樱桃中挑选自己喜欢的樱桃,在git中就是多次commit中挑选一个或者几个commit出来,也可以理解为把特定的commit复制到一个新分支上。

应用场景

commit 都提交了,为什么还要复制新的出来?

应用场景1:有时候版本的一些优化需求开发到一半,可能其中某一个开发完的需求要临时上,或者某些原因导致待开发的需求卡住了已开发完成的需求上线。这时候就需要把 commit 抽出来,单独处理。

应用场景2:有时候开发分支中的代码记录被污染了,导致开发分支合到线上分支有问题,这时就需要拉一条干净的开发分支,再从旧的开发分支中,把 commit 复制到新分支。

命令使用

复制单个

现在有一条feature_cherrypick分支,commit 记录如下:

commit 09cc27103ea4b5ec6f9827e41583e3f0fdbb5efb (HEAD -> feature_cherrypick, origin/feature_cherrypick)
Author: aiqinhai <aiqinhai@qq.com>                                                                                                             
Date:   Fri Sep 22 21:20:39 2023 +0800                                                                 [修改代码]cherryPick第六次   

需要把 09cc27103ea4b5ec6f9827e41583e3f0fdbb5efb 这次commit复制到另一个分支,首先把 commitHash 复制下来,然后切到 master 分支。master分支当前在cherryPick3()这个版本,使用cherry-pick把 09cc27103ea4b5ec6f9827e41583e3f0fdbb5efb commit应用到当前分支。由于feature_cherrypick分支和master分支差三个分支,在进行git cherry-pick之后出现冲突,这时候进行冲突解决即可。

复制多个

以上是单个 commit 的复制,下面再来看看 cherry-pick 多个 commit 要如何操作。一次转移多个提交:

git cherry-pick commit1 commit2

上面的命令将 commit1 和 commit2 两个提交应用到当前分支。多个连续的commit,也可区间复制:

git cherry-pick commit1^..commit2

上面的命令将 commit1 到 commit2 这个区间的 commit 都应用到当前分支(包含commit1、commit2),commit1 是最早的提交。比如说feature_cherrypick分支,有如下三个commit.

commit 668a7ca5daabd8dedbdfdc15e9abad912adc6414
Author: aiqinhai <aiqinhai@qq.com>
Date:   Fri Sep 22 20:52:36 2023 +0800[修改代码]cherryPick第三次commit 5b303cc62fcd3d3121619d1163f2ec3392d65b7c
Author: aiqinhai <aiqinhai@qq.com>
Date:   Fri Sep 22 20:35:31 2023 +0800[修改代码]cherryPick第二次commit 8ffb06b413047d818f920758288491c70c4fa9e4
Author: aiqinhai <aiqinhai@qq.com>
Date:   Fri Sep 22 20:33:55 2023 +0800[修改代码]cherryPick第一次

 我们可以一次性将cherryPick第一次至cherryPick第三次三次commit复制新分支feature_app6.6上,先切换到feature_app6.6分支上,再执行git cherry-pick 8ffb06b413047d818f920758288491c70c4fa9e4^..668a7ca5daabd8dedbdfdc15e9abad912adc6414命令,执行结果如下。

应用成功之后,git push到远程分支即可

cherry-pick 代码冲突

在cherry-pick多个commit时,可能会遇到代码冲突,这时cherry-pick会停下来,让用户决定如何继续操作。我们可以解决冲突,然后使用cherry-pick --continue让cherry-pick继续进行下去。把冲突之后的commit也复制进来,整个流程就完成了。但有时候可能需要在代码冲突后,放弃或者退出流程:

放弃 cherry-pick:
git cherry-pick --abort

回到操作前的样子,就像什么都没发生过。

退出 cherry-pick:
git cherry-pick --quit

不回到操作前的样子。即保留已经cherry-pick成功的 commit,并退出cherry-pick流程。

http://www.lryc.cn/news/176599.html

相关文章:

  • QT5|C++|通过创建子线程方式实现进度条更新
  • 基于mediasoup的webrtc server,性能压测时发现带宽利用率偏低(40%)
  • Ubuntu Redis开机自启动服务
  • Stm32_标准库_呼吸灯_按键控制
  • MySQL作业:索引、视图、存储、函数
  • 漫谈:C语言 C++ 所有编程语言 =和==的麻烦
  • 十五、异常(1)
  • Redis 哨兵模式搭建教程
  • 【C++】gnustl_static 与 c++_shared 的区别
  • 怎样选择第三方检测机构获取功能测试报告?
  • 【@PostConstruct、 @Autowired与构造函数的执行顺序】
  • 用vite搭建vue3+ts项目
  • 前端求职指南
  • datax同步数据翻倍,.hive-staging 导致的问题分析
  • DataGrip 恢复数据
  • 【深度学习实验】前馈神经网络(一):使用PyTorch构建神经网络的基本步骤
  • 【Unity】LODGroup 计算公式
  • 【数学建模】2023华为杯研究生数学建模F题思路详解
  • docker 安装 nessus新版、awvs15-简单更快捷
  • 使用API Monitor工具巧妙探测C++程序中监听某端口的模块
  • vue-grid-layout移动卡片到页面底部时页面滚动条跟随滚动
  • git查看自己所在的分支
  • 竞赛 基于视觉的身份证识别系统
  • Redis的softMinEvictableIdleTimeMillis和minEvictableIdleTimeMillis参数
  • 向量数据库库Milvus Cloud2.3 的QA问题
  • 嵌入式 - 经典的有刷电机和先进的无刷电机
  • 【力扣2154】将找到的值乘以 2
  • C++ —— 单机软件加入Licence许可权限流程(附详细流程图、详细代码已持续更新..)
  • Windows 下 MySQL 8.1.0 安装及配置图文指南,快速搭建实验学习环境
  • Linux内核顶层Makefile的make过程总结