如何重新创建在存储库移动时丢失和无法访问的旧提交

how to recreate old commits that got missing and unreachable at repository move

我已经从 gitorious 转移到 gitlab 并且在第一次推送到 gitlab 时,忘记也推送我所有的标签。

在旧存储库中,某些提交只能访问是因为它们在提交链尖端有一个标记。由于新的 repo 没有推送标签,这些提交现在无法访问——事实上,它们甚至不再出现在我的本地或新的远程存储库中(可能是 gc'ed)。 我希望我能以某种方式恢复这些提交而不会弄乱任何历史记录。情况是这样的:

A---B---C---D---E---F <-- master today
     \                
      X---Y---Z       
              ^       
              lost tag

我的磁盘上仍然有旧的本地存储库(与现在不可用的 gitorious 远程链接)以及我想推送到新存储库的提交 X Y Z。

我该怎么做?

我已经根据 nwinkler 的建议解决了我的问题:

在我的旧本地仓库中,我已将遥控器更改为新仓库并推送所有标签:

git remote rm origin
git remote add origin [new repo URL]
git push --tags

(我想我可以用 set-url 代替,但我从头到尾都不知道。)

有趣的是,这并没有推送 "lost tag",即使它存在于旧的本地仓库中。我必须在本地现有标签上创建一个临时分支并推送它

git checkout <lost-tag-which-exists-in-old-local>
git checkout -b temp-resurrect
git push -u origin temp-resurrect
git branch -d temp-resurrect
git push origin --delete temp-resurrect

在此之后,我可以在新的远程存储库(Web 界面)中看到提交 X Y Z 和标签,然后拉取标签并提交到新的本地存储库。

我暂时保留这个问题,以防有人找到更好的解决方案。