git 跨仓库合并

1、前言

本文档为跨git仓库合并代码并保留commit历史记录提供理论基础和指导。

本文档读者要具备对git仓库,本地仓库、远程仓库的深刻认识。

2、理论基础

  1. git是一个完整的本地版本管理系统。
  2. git本地仓库和远程仓库没有区别
  3. 跨仓库合并代码,本质是将A仓库作为B仓库的远程仓库,并将AB仓库关联起来,即可作为一个仓库进行操作。

3、前提条件

准备两个仓库,本地初始化两个仓库即可演示。

仓库A:  repo_A

仓库B:  repo_B

初始化两个仓库,每个仓库提交一个文件,并多commit几次,形成提交记录。

本地演示目录: /d/workspace/acrossRepos

仓库目录

/d/workspace/acrossRepos/repo_A/.git

/d/workspace/acrossRepos/repo_B/.git

 

仓库repo_A创建repo_A.txt文件,提交2次。

 

仓库repo_B创建repo_B.txt文件,提交2次。

4、合并目标

将仓库repo_B的文件及提交记录合并到仓库repo_A

即在仓库repo_A中,可以看到repo_B的文件,使用git log可以看到repo_B的提交记录

5、合并流程

第一步,repo_B作为repo_A的远程仓库,即repo_A作为本地仓库。repo_B作为远程仓库。

repo_B作为远程仓库添加到repo_A中,并给repo_B起个别名repo_BB,远程分支名默认为origin

第二步:fetch远程仓库repo_BB到本地

第三步:创建本地分支并关联远程分支,repo_B仓库只有master分支,故使用master分支演示。

本地创建分支名为:repo_B_master_branch,该分支内容与repo_Bmaster分支相同。

第四步:切换到repo_Amaster分支,准备从repo_A仓库的repo_B_master_branch分支合并repo_B仓库的master分支的代码和历史记录。

第五步:从repo_B_master_branch 分支merge cherry-pickrepo_A仓库master分支。merge的时候会报错:

意思是两个仓库的历史记录没有任何关联,拒绝合并。加如下参数允许合并:

--allow-unrelated-histories

合并后,使用git log查看repo_A仓库的历史记录

6、Q&A

如果涉及到远程仓库,仅仅多了合并前把远程仓库clone/pull到本地,合并后把本地仓库push到远程而已。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章