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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将旧提交从旧存储库移动到新存储库相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

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

另一答案

我这样做的方式与蒂姆相似,但是我会回顾一下我最终做的事情。请注意,正如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

以上是关于如何将旧提交从旧存储库移动到新存储库的主要内容,如果未能解决你的问题,请参考以下文章

如何将旧 S3 存储桶中的 Terraform 状态移动到新的 S3 存储桶?

将原有的存储库转移到新的存储库,保留提交记录

我可以从 Eclipse 切换 SVN 存储库吗?

从旧的 Git 提交中删除私有信息

如何将分支内容移动到另一个存储库保留历史记录并避免复制原始存储库的完整历史记录?

将旧版 Admob 移动到新的 Admob 帐户后,是不是必须使用新的广告单元 ID 更新我的应用