多个git项目库之间的cherry-pick操作

2023-12-24 15:40

本文主要是介绍多个git项目库之间的cherry-pick操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 多个git项目库之间的cherry-pick操作
    • 1、目的:把A库master分支的某次提交commit id 提交到 B库feature分支
    • 2、在A库代码目录中通过git log 查看需要的commit id
    • 3、切换到B库的代码目录中
      • 1)****B库: 在本地添加另一个A库
      • 2)****B库: 通过 `git remote -v` 查看是否添加成功
      • 3)****B库: 通过 `git fetch devorigin` 将A库的该分支信息同步到本地
      • 4)完成 fetch 就已经可以开始`cherry-pick`操作了
      • 5)同时本地B库feature分支也会生成一条 commit 记录
      • 6) 最后将本地合并的代码 `git push` 到B库线上仓库
  • cherry-pick
    • 基本用法
    • cherry pick转移多个提交
    • cherry pick 配置项
    • cherry pick 代码冲突

多个git项目库之间的cherry-pick操作

从git上的A库 fork 到 B库,然后A库和B库进行独自的开发。开发中也会遇到一些问题,例如A库有重要的代码修复,老办法是再去B库修改一次,操作起来不太方便。这里就尝试从多个不同git库中进行cherry-pick。

1、目的:把A库master分支的某次提交commit id 提交到 B库feature分支

2、在A库代码目录中通过git log 查看需要的commit id

在这里插入图片描述

3、切换到B库的代码目录中

1)****B库: 在本地添加另一个A库

git remote add devorigin https://gitee.com/A库的代码地址

2)****B库: 通过 git remote -v 查看是否添加成功

在这里插入图片描述

3)****B库: 通过 git fetch devorigin 将A库的该分支信息同步到本地

在这里插入图片描述

这里简单概况下git fetch 和 git pull 的区别
git fetch 是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中
git pull 则是将远程主机的最新内容拉取到本地并且直接进行合并,即:git pull = git fetch + git merge这样可能会产生冲突,需要手动解决

4)完成 fetch 就已经可以开始cherry-pick操作了

****B库:git cherry-pick 279f6669f485a522471d5b4c42c828be5df47b4e

如果发生代码冲突会提示代码冲突目录地址:
在这里插入图片描述
合并成功的提示:
在这里插入图片描述
上图的提示就说明成功的把A库master分支的某次 commit 提交 合并 到B库feature分支上了。

5)同时本地B库feature分支也会生成一条 commit 记录

在这里插入图片描述
此时如果发现合并错误可以通过 git reset --hard 'commit id' 回退到上一次commit的版本

6) 最后将本地合并的代码 git push 到B库线上仓库

cherry-pick

基本用法

git cherry-pick :将指定的提交 commit id 合并到其他分支

git cherry-pick commitid

举个例子,代码仓库有master和feature两个分支

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

将提交 f 合并到 master 分支

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

完成上述操作后:代码库就变成了👇🏻,可以看到 master 分支的最新提交增加了一个 f

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

cherry pick转移多个提交

cherry-pick 支持一次转移多个提交

$ git cherry-pick <commitid1> <commitid2>

上述命令是将 1 和 2 两次提交应用到当前分支,同时也会再当前分支生成一条新的 commit 提交。
如果要转移一系列的连续提交,可以使用下面的简洁语法

$ git cherry-pick commit1..commit9 

上述的命令可以转移 > 1 && ≤ 9 的所有提交。他们必须按照正确的顺序放置:提交 commit1 必须早于提交 commit9,否则命令将失效,但不会报错。
特别注意,上述的命令并不包含 commit1。如果要实现 ≥1 && ≤9,可以使用下面的语法

$ git cherry-pick commit1^..commit9 

cherry pick 配置项

常用配置:
1、-e,--edit

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

2、-n,--no-commit

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

3、-x

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

4、-s,--signoff

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

cherry pick 代码冲突

1、--continue

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

$ git cherry-pick --continue

2、--abort

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

$ git cherry-pick --abort

3、--quit

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

$ git cherry-pick --quit

这篇关于多个git项目库之间的cherry-pick操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532292

相关文章

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢