多个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