【问题标题】:How to Merge two different Git repositories?如何合并两个不同的 Git 存储库?
【发布时间】:2019-06-14 11:13:04
【问题描述】:

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

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

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

git pull ~giturlofremoterepo(拉取同目录下的远程repo)

【问题讨论】:

  • 您想将代码库保存在一个地方,即远程服务器还是将两者的实际更改列表合并到一个主服务器中?
  • @nitishagar 是的,我想将代码库保存在一个地方,即远程服务器。

标签: git github gitlab bitbucket


【解决方案1】:

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

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

git clone https://first.repo
git remote add second https://second.repo

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

git fetch second
git checkout second/master
git checkout -b second

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

git rebase master second

推送到新的上游仓库

git push -u ...

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

【讨论】:

    【解决方案2】:

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

    $ mkdir merged_repo
    $ cd merged_repo
    $ git init 
    $ touch README.md
    $ git add .
    $ git commit -m "Initialize new repo"
    

    添加第一个远程仓库

    $ git remote add -f first_repo `link_to_first_repo`
    $ git merge --allow-unrelated-histories first_repo/master
    

    创建一个子目录并将所有 first_repo 文件移动到它。

    $ mkdir first_repo
    $ mv * first_repo/
    $ git add .
    $ git commit -m "Move first_repo files to first_repo directory"
    

    添加第二个远程仓库

    $ git remote add -f second_repo `link_to_second_repo`
    $ git merge --allow-unrelated-histories second_repo/master
    

    修复任何合并冲突并按如下方式完成合并

    $ git merge --continue
    

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 1970-01-01
      • 2012-04-29
      相关资源
      最近更新 更多