在开始进行仓库合并之前先大致梳理一下合并的原理,这样才能在出错的时候找到合理的解决方案。如果想直接看操作,看具体操作部分即可
场景梳理:
- 仓库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为例子来说: