如何将旧提交从旧存储库移动到新存储库
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。
我所做的一步一步:
- 转到BitBucket本地存储库。
- 添加一个遥控器指向您的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)
- 获取GitHub提交。我是这样做的:
git fetch github
现在,您的本地存储库包含GitHub存储库中的所有提交。 - 将本地存储库中的提交推送到GitHub远程存储库
git push github master
现在,GitHub远程具有它的原始提交(从您在步骤3中获取它们)和BitBucket提交(它们始于本地存储库)。 - 从存储库中删除BitBucket远程URL ...
git remote remove origin
...并将GitHub远程URL重命名为origin
:git remote rename github origin
现在,一切都与世隔绝。
不同的事情:
- 使用
git fetch --all
这将从您保存的每个远程URL获取新提交。这将取代我从上面使用的第一个假设(BitBucket repo拥有它的所有最新提交)。 - 您有多个分支要转移。
根据我的理解,
git fetch
命令将在第3步中删除所有分支的提交。 要从文档中恢复结果,您可以执行git push github --all
来推送对每个分支所做的更改。 - 你有提交冲突的提交
在推之前你可能不得不做一个
git merge
。
以上是关于如何将旧提交从旧存储库移动到新存储库的主要内容,如果未能解决你的问题,请参考以下文章
如何将旧 S3 存储桶中的 Terraform 状态移动到新的 S3 存储桶?