多个git项目库之间的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
 
 
posted @ 2023-02-10 16:09  ____chen  阅读(1005)  评论(0编辑  收藏  举报