如何合并两个不同的 Git 存储库?

Cod*_*Sam 6 git github bitbucket gitlab

我有两个 Github 存储库。一个存储库在远程服务器上,另一个在本地服务器上。它们都有不同文件和文件夹的不同提交历史。现在我想合并它们,这样我就可以将它们作为一个存储库放在远程服务器上。请帮忙!

我寻找了各种建议的解决方案:重置本地存储库的头部,然后将远程存储库拉到同一目录中,但它似乎不起作用:

git reset --soft head ~CommitSHA(本地仓库的第一次提交)

git pull ~giturlofremoterepo(在同一目录中拉取远程仓库)

mic*_*hid 11

简而言之,您可以检出一个存储库,将远程添加到第二个,将第二个重新设置在第一个之上,然后将结果推送到新的单个远程存储库:

克隆第一个存储库并将远程添加到第二个

git clone https://first.repo
git remote add second https://second.repo
Run Code Online (Sandbox Code Playgroud)

获取第二个并将其主分支检出到本地分支 second

git fetch second
git checkout second/master
git checkout -b second
Run Code Online (Sandbox Code Playgroud)

将第二个存储库的 master 分支重新设置在第一个存储库的 master 分支之上。在此过程中解决任何潜在的冲突。

git rebase master second
Run Code Online (Sandbox Code Playgroud)

推送到新的上游存储库

git push -u ...
Run Code Online (Sandbox Code Playgroud)

这导致两个提交历史被一个接一个地连接起来。


小智 6

创建一个新的 git 存储库并使用新的 README 文件进行初始化。

$ mkdir merged_repo
$ cd merged_repo
$ git init 
$ touch README.md
$ git add .
$ git commit -m "Initialize new repo"
Run Code Online (Sandbox Code Playgroud)

添加第一个远程存储库

$ git remote add -f first_repo `link_to_first_repo`
$ git merge --allow-unrelated-histories first_repo/master
Run Code Online (Sandbox Code Playgroud)

创建一个子目录并将所有first_repo 文件移至其中。

$ mkdir first_repo
$ mv * first_repo/
$ git add .
$ git commit -m "Move first_repo files to first_repo directory"
Run Code Online (Sandbox Code Playgroud)

添加第二个远程存储库

$ git remote add -f second_repo `link_to_second_repo`
$ git merge --allow-unrelated-histories second_repo/master
Run Code Online (Sandbox Code Playgroud)

修复所有合并冲突并完成合并,如下所示

$ git merge --continue
Run Code Online (Sandbox Code Playgroud)