如何将新提交从旧存储库移到新存储库

时间:2019-01-31 20:08:35

标签: git github

所以我犯了一个愚蠢的错误。我最近将我的私有存储库从BitBucket迁移到GitHub,以将我的所有数据归为一个帐户(简单)。删除本地到位桶回购和克隆上的所有我的电脑新GitHub的回购。不幸的是,我忘记对工作的服务器执行相同的操作。

我目前的情况是这样。迁移后,我对GitHub的回购和正回购到位桶两个新的提交。我想将那些BitBucket提交移至GitHub存储库,同时仍保留新的GitHub提交。如果还保留了BitBucket提交的时间,那将是很好的,但是我可以不用这样做。

我应该如何去做?我已经看到了有关将提交从一个存储库移动到另一个存储库的答案,但是没有任何尝试将新提交保留在新存储库上的答案。如果这是正确的方法,请随时将我引向先前回答的问题。

2 个答案:

答案 0 :(得分:2)

要维护旧的提交(作者,日期,时间等),您必须将BB提交合并到GitHUB中。您可以使用从GitHub克隆的本地存储库来执行此操作。接下来,添加一个指向您的BB存储库的遥控器,并执行“ git fetch --all”。现在,您拥有与GitHub提交相同的(本地)存储库中来自BB的所有提交。接下来,创建(并签出)您希望将BB提交合并到的分支。该分支将从GitHUB提交分支出来。然后,您可以执行“ git merge”以将新的BB提交合并到新的GitHub分支中。接下来,删除BB遥控器,然后将新分支推送到远程GitHUB存储库。

如果无法进行合并,则可以使用Cherry-pick,但这不能保留BB提交(作者,日期/时间)

答案 1 :(得分:0)

我做这件事的方式更像是chepner,而不是Tim,但我将回顾我最终实际要做的事情。请注意,正如chepner所说,这可能会与git远程服务的任何组合一起使用,因此,如果您不使用BitBucket或GitHub,则只需对其他git远程服务URL进行相同的操作即可。

这些步骤的假设(在我的情况下是正确的):

  • 本地BitBucket存储库是最新的所有最新提交

  • 存储库只有一个主分支(根本没有子分支)

  • 新的GitHub提交所编辑的文件与新的BitBucket提交所编辑的文件不同(因此,没有任何合并冲突的可能)。

有关这些假设不正确的解决方法,请参见“不同之处”。

tl; dr 将GitHub远程添加到BitBucket本地存储库,获取GitHub提交,并将本地存储库推送到GitHub。

我所做的工作的逐步详细说明:

  1. 转到BitBucket本地存储库。

  2. 添加一个远程指向您的GitHub存储库。

    git remote add github <url GitHub repo>

    可以通过git remote -v进行验证。这将输出在该本地存储库中使用的所有远程URL。应该有四个条目,两个用于BitBucket的访存/推送,两个用于GitHub的访存/推送:

    $ git remote -v origin <url BitBucket> (fetch) origin <url BitBucket> (push) github <url GitHub> (fetch) github <url GitHub> (push)

  3. 获取GitHub提交。我这样做的方式是:

    git fetch github

    现在您的本地存储库具有GitHub存储库中的所有提交。

  4. 将本地存储库中的提交推送到GitHub远程存储库

    git push github master

    现在GitHub远程服务器具有原始提交(从您在步骤3中获取它们时开始)和BitBucket提交(首先存在于本地存储库中)。

  5. 从存储库中删除BitBucket远程URL ...

    git remote remove origin

    ......并将GitHub远程URL重命名为origin

    git remote rename github origin

现在,世界一切都很好。

不同之处:

  1. 使用git fetch --all

    这将从您保存的每个远程URL中获取新的提交。这将替代我从上面使用的第一个假设(BitBucket存储库具有所有最新提交)。

  2. 您有多个分支要转移。

    据我所知,git fetch命令将在步骤3中从所有分支下拉提交。

    要备份结果,请从文档中进行git push github --all,以对每个分支进行更改。

  3. 您的提交有冲突

    在推动之前,您可能必须做git merge