合并两个仓库

合并两个Git仓库

如果要合并两个Git仓库到,并且要保留两者的提交历史,一个仓库在主目录,另一个仓库在子目录。可以通过一下步骤进行:

步骤1: 添加远程仓库

假设你已经有一个名为repoA的本地仓库,现在需要将repoB合并进来。首先,我们需要将repoB添加为一个新的远程仓库:

1
git remote add repoB <repoB-url>

通过这条命令,repoB 成为了一个可以访问的远程仓库。

步骤2: 获取远程仓库数据

使用fetch命令从新添加的远程仓库获取所有分支和数据:

1
git fetch repoB

这一步会将repoB的所有数据下载到本地,但不会自动合并到你的工作目录。

步骤3: 移动repoA 的内容到一个单独的目录

为了避免合并时的内容冲突,我们先将repoA的内容移动到一个新目录下,例如repo1

1
2
3
mkdir repo1 # 目录名不与repoB的目录冲突就可以
find . -mindepth 1 -maxdepth 1 ! -name .git ! -name repo1 -exec mv {} repo1/ \;
git commit -am "Move existing contents of repoA into repo1"

步骤4: 合并仓库

现在开始实际的合并操作。首先,确保你在repoA的根目录下:

1
2
git merge repoB/master
git commit -am "Merge repoB into repoA"

这里假设你希望将repoBmaster分支合并进来。命令执行后,Git会将repoBmaster分支内容合并到当前分支。

说明

如果要把repoA放在主目录,并保持repoA的repo-url,那么可以这么做:

  • 在repoB中进行如上操作

  • 在repoA中添加repoB,使用repoB的分支覆盖repoA的分支

注意分步骤执行

原仓库内容移至子目录后进行commit,便于git识别rename操作。 如果使用git reset命令把步骤3和步骤4放在一个提交,那么会导致git无法正确的识别文件的历史。

评论