对于Github上的开源代码,一般都采用fork方式到自己账户下,进行二次开发定制或增强修正一些功能,久而久之,你fork的代码已经与官方代码有了很大的差别,尤其是当官方升级版本后,也想升级自己fork库的代码,那么就需要涉及升级合并两个库。

以Apache 的NiFi项目为例说明,Github库为

https://github.com/apache/nifi.git

自己fork的库地址为

https://github.com/kemixkoo/nifi.git

自该文时,Apache已发布正式版1.7.1, 假设自己fork的master是基于1.7.0-SNAPSHOT,现在需要将Apache官方发布版本的tag "rel/nifi-1.7.1"合并到自己开发分支的master上。

为了达到升级合并release tag的目的,首先需要clone自己fork的库:

git clone https://github.com/kemixkoo/nifi.git

然后进入本地的nifi目录(即库工作目录),添加Apache官方NiFi库:

git remote add official https://github.com/apache/nifi.git

然后拉取最新的官方代码:

git fetch official

fetch之后,.git/config里的内容如下:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/kemixkoo/nifi.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

[remote "offical"]
    url = https://github.com/apache/nifi.git
    fetch = +refs/heads/*:refs/remotes/offical/*

准备工作已经就绪了,现在就开始正式的代码升级合并,为了保证不破坏原master分支,可临时创建一基于master的升级分支upgrade。

git co -b upgrade origin/master

由于先clone的是自己的fork库,所以默认的origin/master是自己fork的master远程分支,而经过fetch之后official/master是官方的master远程分支。

由于官方的release Tag是以rel开头的,比如rel/nifi-1.7.1,合并升级执行:

git merge rel/nifi-1.7.1

如果有合并冲突,可能有“CONFLICT (content)”之类的信息。可通过执行git status查看具体的冲突文件,在“Unmerged paths”列表下有both开头的,均为冲突文件,具体说明见下表:

状态 操作 说明

both modified

手动解决冲突 文件冲突,需手动解决每一个文件的冲突
both deleted 不做操作 同时都删除,无需做任何操作,也许拉取了官方的单个提交导致

both added

不做操作 同时都添加而无冲突,无需做任何操作,也许拉取了官方的单个新功能提交导致

deleted by us

检查 被我们删除,可能无需做任何操作,需检查依赖
deleted by them 检查 被官方删除,需检查是否有依赖,如果也不需要,可不做任何操作

added by us

不做操作

由我们新添加,无需做任何操作

added by them 不做操作 由官方新添加,可能是新功能,无需做任何操作

因此主要关注“both modified”状态的文件,需要手动一个一个仔细的解决冲突,否则将导致比较严重的后果。

解决完冲突后,即可执行添加index操作,并提交

git add .
git ci -m "Upgrade to 1.7.1"

至此,升级合并操作已完成,实际上如果想合并最新的master,也是类似操作,只是将release tag “rel/nifi-1.7.1”替换为官方的master,即

git merge official/master

但是为了保证升级成功,可执行相应CI程序,比如打包,测试等等后继验证流程。

最后说明几点:

  1. 为何用merge而不用rebase?这是因为,rebase解决冲突是每个提交解决一次,如果有比较多的提交有冲突,那么需要解决n次,这是比较烦恼的,采用merge只需一次即可解决所有的冲突。
  2. 为何merge没有策略选项,这是因为需要保证所有文件状态都可见,而不采用策略而自动处理,势必导致后期查找问题比较困难。

[Git]升级合并两个Git库相关推荐

  1. 您如何合并两个Git存储库?

    请考虑以下情形: 我在自己的Git存储库中开发了一个小型实验项目A. 它现在已经成熟,我希望A成为较大项目B的一部分,该项目B具有自己的大型存储库. 我现在想将A添加为B的子目录. 如何将A合并为B, ...

  2. 【Git】git 如何合并两个仓库(拉取A仓库的分支到B仓库)

    文章目录 1.概述 2. 案例 2.1 netty 2.2 案例2 2.3 合并2个jdk版本 1.概述 我以前注释了Storm源码,第一次注释是在Strom-1.2版本,因为注释的时候是下载源码注释 ...

  3. git怎么合并两个分支

    git怎么合并分支代码 1.git 命令 注意: 第一步你得把当前分支合到远程分支去才能有下面的操作 另外我是将develop分支代码合并到release分支去 1.推完代码到远程仓库查看本地分支(如 ...

  4. c++两个vector合并_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

  5. 这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

  6. [Git Rebase] Git Rebase 合并提交(命令操作 SourceTree 操作)

    前言 在开发过程中, 我们有的时候会有代码提交失误的情况. 在前一章, 我们介绍了git push - - force命令. 本章我们介绍git rebase命令及 SourceTree内的相关操作. ...

  7. git 主干修改合并到分支_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师"合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的是 ...

  8. git合并分支后,删除分支_使用git删除合并的分支

    git合并分支后,删除分支 It's common courtesy to keep your git branch list clean, especially when colleagues ne ...

  9. git 取消合并与撤销

    Git取消合并与撤销 git取消合并# git merge --abort git撤销# git reset - git reset --soft: 将分支回退到指定提交,工作区维持现状不变,暂存区会 ...

最新文章

  1. php alert 乱码
  2. pandas获取数据行号,删除行数据
  3. (54)线程结构体 ETHREAD,线程断链
  4. linux查找特定类型的文件中是否包含特定字段
  5. c语言 overflow_C语言和其他语言的不得不说的差别!
  6. 一对多 java_mybatis一对多和多对一
  7. 挖掘频繁模式、关联和Apriori算法
  8. 安装工程造价课程设计_安装工程造价课程设计的图纸-上海装修报价
  9. python sizeof_python 变量作用域 v.__sizeof__() python 深复制 一切皆对象 尽量减少内存消耗 赋值语句的原理...
  10. 1092 最好吃的月饼 (20 point(s))- PAT乙级真题
  11. 分布式设计 —— 容错与主备
  12. mysql存过游标_mysql存储过程游标使用
  13. 将 Ps 的调色效果保存为预设文件
  14. 02326操作系统课后答案
  15. 解决npm install 报错,亲测有效
  16. jsp调用getParameterValues获取表单信息
  17. 水晶头(网线)的线序
  18. 西电计算机科学与技术学院王,王书振 - 西安电子科技大学 - 计算机科学与技术学院...
  19. 调频连续波雷达(FMCW)测距/测速原理
  20. 华硕主板装系统蓝屏_华硕主板装系统蓝屏怎样设置bios?

热门文章

  1. HTML仿谷歌浏览器新标签页,非常实用的chrome新标签页:Infinity新标签页
  2. [转载]英语阅读用到的英文词汇收藏
  3. Java内存区域与内存溢出异常
  4. 【报错:no more cluster attempts left,已解决】
  5. mysql 单表查询 优化_SQL优化 MySQL版 - 单表优化及细节详讲
  6. 我在春晚现场护航直播
  7. 1.JAVA编程算体积
  8. 实操 ----Mocap采集VIO数据集
  9. SD-Access 理解
  10. python随机生成列表_随机词生成器-Python