所以我犯了一个愚蠢的错误。我最近将我的私有存储库从BitBucket迁移到GitHub,以将我的所有数据归为一个帐户(简单)。删除本地到位桶回购和克隆上的所有我的电脑新GitHub的回购。不幸的是,我忘记对工作的服务器执行相同的操作。
我目前的情况是这样。迁移后,我对GitHub的回购和正回购到位桶两个新的提交。我想将那些BitBucket提交移至GitHub存储库,同时仍保留新的GitHub提交。如果还保留了BitBucket提交的时间,那将是很好的,但是我可以不用这样做。
我应该如何去做?我已经看到了有关将提交从一个存储库移动到另一个存储库的答案,但是没有任何尝试将新提交保留在新存储库上的答案。如果这是正确的方法,请随时将我引向先前回答的问题。
答案 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。
转到BitBucket本地存储库。
添加一个远程指向您的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)
获取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存储库具有所有最新提交)。
您有多个分支要转移。
据我所知,git fetch
命令将在步骤3中从所有分支下拉提交。
要备份结果,请从文档中进行git push github --all
,以对每个分支进行更改。
您的提交有冲突
在推动之前,您可能必须做git merge
。