当前位置: 首页 > news >正文

git——仓库合并不丢失git记录

在开始进行仓库合并之前先大致梳理一下合并的原理,这样才能在出错的时候找到合理的解决方案。如果想直接看操作,看具体操作部分即可

场景梳理:

  • 仓库a和仓库b是并列关系,共同合并进一个新的仓库c中
  • 仓库a和仓库b是从属关系,将仓库b作为仓库a的子仓库合并

原理浅析

以上的两种场景合并原理是类似的只是在操作上略微有一点点差异。这里先说总的原理,再来分析具体的差异。

概念:为了方便理解,我们先假设需要将仓库a和b合并作为子目录合并进仓库c,以下先以这个例子进行讲解。

合并原理:

  • 设置远端: 将需要并入的仓库a和b作为远端仓库加入进目标仓库c
  • fetch: 将远端仓库a和b使用fetch拉到本地
  • 创建分支: 将拉下来的代码作为新的分支进行创建
  • 合并分支: 带参数–allow-unrelated-histories将分支a和b合并进主分支

至此,仓库a和b就保留git提交记录合并进了c。

原理在于分支合并是不丢失git提交记录的
关键点是–allow-unrelated-histories,因为这允许不相关的提交被合并。

场景差异:
刚刚说到两种场景会有一些差异,差异点在于:
如果是b作为子目录合并进a,那么b中的文件不会覆盖a,以package.json为例子来说:

// 合并后b的package.json在自己目录下
a/b/package.json

// a的文件在
a/package.json

但是对于a和b合并进c来说,package.json都在根目录就会冲突,解决方案是使用git mv将a和b都往子目录挪动一级。具体操作参照下方的具体操作。第一步是挪动文件,挪不挪根据自己的具体项目确定。

具体操作:

ls -A | grep -wv '.git\|performance-monitor' | xargs -t -I '{}' git mv {} performance-monitor/{}
git add .
git commit -m 'combine(*) mv performance'

mkdir exception
ls -A | grep -wv '.git\|exception' | xargs -t -I '{}' git mv {} exception/{}
git add .
git commit -m 'combine(*) mv exception'

git remote add exception ./exception-sdk
git remote add performance ./performance-sdk

git fetch exception
git fetch performance

git checkout -b exception exception/master
git checkout -b performance performance/master


git merge performance --allow-unrelated-histories
git merge exception --allow-unrelated-histories

git remote remove exception
git remote remove performance

相关文章:

  • 【云原生】MySQL on k8s 环境部署
  • Jetpack ViewModel源码分析
  • 数字逻辑第二章笔记
  • 从开发角度看羊了个羊
  • 我用PaddleOCR把Halcon论坛的OCR帖子试了一遍,结果。。。
  • 微信号怎么改
  • Spring集成Apache Kafka教程
  • 基于SSM实现图书馆座位预约系统
  • java部分排序算法
  • Java8-特性
  • Mybatis-Plus快速入门|比Mybatis更简单好用的ORM框架
  • Java异常的捕获和处理
  • 若依一体式改包名
  • 【机器学习kaggle赛事】泰坦尼克号生存预测
  • 【C进阶】——详解10个C语言中常见的字符串操作函数及其模拟实现
  • python3.6+scrapy+mysql 爬虫实战
  • [译]Python中的类属性与实例属性的区别
  • isset在php5.6-和php7.0+的一些差异
  • JS 面试题总结
  • mockjs让前端开发独立于后端
  • Nodejs和JavaWeb协助开发
  • Node项目之评分系统(二)- 数据库设计
  • Promise面试题,控制异步流程
  • react 代码优化(一) ——事件处理
  • Redis学习笔记 - pipline(流水线、管道)
  • SegmentFault 2015 Top Rank
  • select2 取值 遍历 设置默认值
  • 阿里研究院入选中国企业智库系统影响力榜
  • 对象引论
  • 构建工具 - 收藏集 - 掘金
  • 原生 js 实现移动端 Touch 滑动反弹
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • #if #elif #endif
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (差分)胡桃爱原石
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (理论篇)httpmoudle和httphandler一览
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)linux 命令大全
  • (转)nsfocus-绿盟科技笔试题目
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .mysql secret在哪_MySQL如何使用索引
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET成年了,然后呢?
  • .NET微信公众号开发-2.0创建自定义菜单
  • @ResponseBody
  • @SuppressWarnings注解
  • [ C++ ] STL_list 使用及其模拟实现
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh