如何重新创建在存储库移动时丢失和无法访问的旧提交
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 和标签,然后拉取标签并提交到新的本地存储库。
我暂时保留这个问题,以防有人找到更好的解决方案。
我已经从 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 和标签,然后拉取标签并提交到新的本地存储库。
我暂时保留这个问题,以防有人找到更好的解决方案。