[Git]升级合并两个Git库
对于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程序,比如打包,测试等等后继验证流程。
最后说明几点:
- 为何用merge而不用rebase?这是因为,rebase解决冲突是每个提交解决一次,如果有比较多的提交有冲突,那么需要解决n次,这是比较烦恼的,采用merge只需一次即可解决所有的冲突。
- 为何merge没有策略选项,这是因为需要保证所有文件状态都可见,而不采用策略而自动处理,势必导致后期查找问题比较困难。
[Git]升级合并两个Git库相关推荐
- 您如何合并两个Git存储库?
请考虑以下情形: 我在自己的Git存储库中开发了一个小型实验项目A. 它现在已经成熟,我希望A成为较大项目B的一部分,该项目B具有自己的大型存储库. 我现在想将A添加为B的子目录. 如何将A合并为B, ...
- 【Git】git 如何合并两个仓库(拉取A仓库的分支到B仓库)
文章目录 1.概述 2. 案例 2.1 netty 2.2 案例2 2.3 合并2个jdk版本 1.概述 我以前注释了Storm源码,第一次注释是在Strom-1.2版本,因为注释的时候是下载源码注释 ...
- git怎么合并两个分支
git怎么合并分支代码 1.git 命令 注意: 第一步你得把当前分支合到远程分支去才能有下面的操作 另外我是将develop分支代码合并到release分支去 1.推完代码到远程仓库查看本地分支(如 ...
- c++两个vector合并_这才是真正的 Git——分支合并
本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...
- 这才是真正的 Git——分支合并
本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...
- [Git Rebase] Git Rebase 合并提交(命令操作 SourceTree 操作)
前言 在开发过程中, 我们有的时候会有代码提交失误的情况. 在前一章, 我们介绍了git push - - force命令. 本章我们介绍git rebase命令及 SourceTree内的相关操作. ...
- git 主干修改合并到分支_这才是真正的 Git——分支合并
本文作者:lzaneli,腾讯 TEG 前端开发工程师"合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的是 ...
- git合并分支后,删除分支_使用git删除合并的分支
git合并分支后,删除分支 It's common courtesy to keep your git branch list clean, especially when colleagues ne ...
- git 取消合并与撤销
Git取消合并与撤销 git取消合并# git merge --abort git撤销# git reset - git reset --soft: 将分支回退到指定提交,工作区维持现状不变,暂存区会 ...
最新文章
- php alert 乱码
- pandas获取数据行号,删除行数据
- (54)线程结构体 ETHREAD,线程断链
- linux查找特定类型的文件中是否包含特定字段
- c语言 overflow_C语言和其他语言的不得不说的差别!
- 一对多 java_mybatis一对多和多对一
- 挖掘频繁模式、关联和Apriori算法
- 安装工程造价课程设计_安装工程造价课程设计的图纸-上海装修报价
- python sizeof_python 变量作用域 v.__sizeof__() python 深复制 一切皆对象 尽量减少内存消耗 赋值语句的原理...
- 1092 最好吃的月饼 (20 point(s))- PAT乙级真题
- 分布式设计 —— 容错与主备
- mysql存过游标_mysql存储过程游标使用
- 将 Ps 的调色效果保存为预设文件
- 02326操作系统课后答案
- 解决npm install 报错,亲测有效
- jsp调用getParameterValues获取表单信息
- 水晶头(网线)的线序
- 西电计算机科学与技术学院王,王书振 - 西安电子科技大学 - 计算机科学与技术学院...
- 调频连续波雷达(FMCW)测距/测速原理
- 华硕主板装系统蓝屏_华硕主板装系统蓝屏怎样设置bios?