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

问题描述 投票:0回答:2

所以我犯了一个愚蠢的错误。我最近将我的私人回购从BitBucket迁移到GitHub,将我的所有数据都放在一个帐户下(简单)。删除了本地BitBucket repos并在我的所有计算机上克隆了新的GitHub存储库。不幸的是,我忘了对我工作的服务器做同样的事情。

我目前的情况是这样的。迁移后,我在GitHub repo和BitBucket repo上都有新的提交。我想将这些BitBucket提交移动到GitHub仓库,同时仍然保留新的GitHub提交。如果BitBucket提交的时间也保留了,那就太好了,但没有那个我就没问题。

我应该怎么做呢?我已经看到了将提交从一个repo移动到另一个repo的答案,但没有尝试在新的repo上保留新的提交。如果这是正确的方法,请随时指导我之前回答的问题。

git github
2个回答
2
投票

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

如果合并不起作用,你可以使用cherry-pick但不保留BB提交(作者,日期/时间)


0
投票

我这样做的方式与蒂姆相似,但是我会回顾一下我最终做的事情。请注意,正如chepner所说,这可能适用于任何git远程服务的组合,因此如果您不使用BitBucket或GitHub,只需对其他git远程服务URL执行相同的操作。

这些步骤的假设(在我的情况下都是如此):

  • 本地BitBucket存储库是最新的所有最新提交
  • 存储库只有一个主分支(根本没有子分支)
  • 新的GitHub提交编辑的不同文件比新的BitBucket提交(因此没有合并冲突的可能性)。

如果这些假设不正确,请参阅“不同的事情”以获取有关如何解决此问题的建议。

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

我所做的一步一步:

  1. 转到BitBucket本地存储库。
  2. 添加一个遥控器指向您的GitHub仓库。 git remote add github <url GitHub repo> 这可以通过git remote -v验证。这将输出该本地存储库中使用的所有远程URL。应该有四个条目,两个用于BitBucket的fetch / push,两个用于GitHub的fetch / push: $ 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重命名为origingit remote rename github origin

现在,一切都与世隔绝。

不同的事情:

  1. 使用git fetch --all 这将从您保存的每个远程URL获取新提交。这将取代我从上面使用的第一个假设(BitBucket repo拥有它的所有最新提交)。
  2. 您有多个分支要转移。 根据我的理解,git fetch命令将在第3步中删除所有分支的提交。 要从文档中恢复结果,您可以执行git push github --all来推送对每个分支所做的更改。
  3. 你有提交冲​​突的提交 在推之前你可能不得不做一个git merge
© www.soinside.com 2019 - 2024. All rights reserved.